Процесс не может получить доступ к файлу "File Name.xls", потому что он используется другим процессом - PullRequest
1 голос
/ 25 февраля 2020

Я пытаюсь получить доступ к документу Excel через службу Windows. Мне не удалось открыть документ, и я получаю эту ошибку.

The process cannot access the file 'C:\PRDBacklog\prd_backlog.xls' because it is being used by another process.:

Мне интересно, есть ли что-то не так с тем, как я к нему обращаюсь? , Это файл Excel 97-03, и я смог получить доступ к другим файлам Excel с помощью этого кода, но ни один из них не был файлом Excel 97-03.

string matrixCopyTargetPath = @"C:\PRDBacklog";
string destFilePath = Path.Combine(matrixCopyTargetPath, fileName);
string sourceFilePath = Path.Combine(filePath, fileName);
// connection string
var cnnStr = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 8.0; HDR = YES\";", destFilePath);
var cnn = new OleDbConnection(cnnStr);
// get schema, then data
var dt = new DataTable();

try
{
   File.Copy(sourceFilePath, destFilePath, true);
   cnn.Open();
   var schemaTable = cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
   string sql = string.Format("select * from {0}", "Sheet1$"); //Unsure how to access the Table
   var da = new OleDbDataAdapter(sql, cnn);
   da.Fill(dt);
}
catch (Exception e)
{
   using (var writer = new StreamWriter(@"C:\Users\kevin_brosam\Desktop\testingExportFromG.txt", true))
   {
   //writer.WriteLine($"0{sheetNames.Count.ToString()}");
   if (!string.IsNullOrEmpty(e.Message))
   writer.WriteLine($"1:{DateTime.Now}: {e.Message}:");
   //if (!string.IsNullOrEmpty(e.InnerException.Message))
   //    writer.WriteLine($"2:{DateTime.Now}: {e.InnerException.Message}:");
   //if (!string.IsNullOrEmpty(e.InnerException.InnerException.Message))
   //    writer.WriteLine($"3:{DateTime.Now}: {e.InnerException.InnerException.Message}:");
   }
}
finally
{
   // free resources
   cnn.Close();
}
// write out CSV data
using (var wtr = new StreamWriter(csvOutputFile, false)) //Successfully creates new file, except file has no data
{
   foreach (DataRow row in dt.Rows)
   {
      bool firstLine = true;
      foreach (DataColumn col in dt.Columns)
      {
         if (!firstLine) { wtr.Write(","); } else { firstLine = false; }
         var data = row[col.ColumnName].ToString().Replace("\"", "\"\"");
         wtr.Write(string.Format("\"{0}\"", data));
      }
   wtr.WriteLine();
   }
} 

Я пытаюсь отладить его в Windows Консоль для простоты, но я получал ту же ошибку, когда она запускалась как Windows Сервис.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...