Я пытаюсь получить доступ к документу 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 Сервис.