/ / Por que o xls abre enquanto / após a leitura do código? - c #, windows, excel, análise

Por que o xls se abre enquanto / depois de lê-lo do código? - c #, windows, excel, análise

Eu tenho uma ferramenta para analisar arquivos do Excel. O usuário escolhe o xls / xlsx a ser lido, então minha ferramenta cria uma cópia dele no temp com um nome aleatório e, em seguida, analisa a cópia. A parte relevante do código:

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();

E então eu começo a trabalhar com o DataTable. Caso os arquivos de origem originais (não ocopy) é aberto no excel, a cópia da pasta temp também é aberta no excel. E aí vem a coisa mais estranha. Se ele for fechado durante a execução do script e, em seguida, eu abrir o xls original somente no Windows Explorer, a cópia do temp será aberta novamente. Além disso, se eu executar o script, por exemplo, 10 vezes (enquanto o original estiver fechado), quando eu abrir todas as 10 cópias nomeadas aleatoriamente abrem junto com ele. Suponho que não seja devido ao código em si, mas sim a algum bug / recurso do Windows / Office. Por favor informar.

Respostas:

2 para resposta № 1

Você tem duas linhas aqui que inicializam e abrem a cópia do seu arquivo de destino

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

Você deve removê-los. A interação OleDb com o arquivo do Excel não precisa da Interoperação para funcionar.

A propósito, ao trabalhar com essas feias variáveis ​​de Interoperação, uso um truque simples para encurtar esses nomes

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

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