/ /なぜコードから読み取り中/読み取り後にxlsが開くのですか? -C#、Windows、Excel、解析

なぜxlsがコードからそれを読んでいる間に開くのですか? - c#、windows、excel、parsing

Excelファイルを解析するツールがあります。 ユーザーが読み込むxls / xlsxを選択すると、ツールが一時的にランダムな名前でそのコピーを作成し、実際にコピーを解析します。コードの関連部分:

string sourceFile = textBox1.Text;
string fileName = System.IO.Path.GetRandomFileName();
string destFile = System.IO.Path.Combine(Path.GetTempPath(), fileName + ".xlsx");
System.IO.File.Copy(sourceFile, destFile, true);

Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook excelBook = xlApp.Workbooks.Open(destFile);
OleDbConnection cnn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + destFile + "; Extended Properties=Excel 12.0;");
string qText = @"select * from [sheet1$]";
OleDbCommand oconn = new OleDbCommand(qText, cnn);
cnn.Open();
OleDbDataAdapter adp = new OleDbDataAdapter(oconn);
DataTable dt = new DataTable();
adp.Fill(dt);
cnn.Close();

そして、私はで作業を開始します DataTable。 元のソースファイル(コピー)がExcelで開いている場合、tempフォルダーからのコピーもExcelで開きます。そして、最も奇妙なものがここに来ます。スクリプトの実行中に閉じられ、その後、Windowsエクスプローラーからのみ元のxlsを開くと、tempからのコピーが再び開きます。ランダムに名前が付けられた10個のコピーがすべて一緒に開かれます。これは、コード自体によるものではなく、Windows / Officeのバグ/機能によるものと思われます。 お知らせ下さい。

回答:

回答№1は2

ここには、宛先ファイルのコピーを初期化して開く2行があります

Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook excelBook = xlApp.Workbooks.Open(destFile);

それらを削除する必要があります。 ExcelファイルとOleDbの相互作用には、相互運用が必要ありません。

ちなみに、これらのopい相互運用変数を操作するときは、簡単なトリックを使用してこれらの名前を短くします

using ExcelLib = Microsoft.Office.Interop.Excel;
.....

ExcelLib.Application xlApp = new ExcelLib.Application();