Эта проблема характерна для случая, когда я пытаюсь обновить существующий файл Excel через WCF. Обратите внимание, что я могу читать файлы Excel, и проблема возникает, только когда я пытаюсь обновить любой файл Excel. Кроме того, эта логика обновления прекрасно работает в моей среде разработки (WinXP, где производственной средой является Windows Server 2008 R2).
Я попробовал шаги, упомянутые в блоге Боргона (тоже http://hopschwiiz.blogspot.com/2011/02/automating-excel-2007-on-windows-server.html), но безуспешно.
Я использую .Net 3.5, SQL Server 2008 и SL 3.0.
По запросу добавили коды ...
string[] strArray;
string fileName = null;
System.Array myvalues = null;
Microsoft.Office.Interop.Excel.Application ExcelObj = null;
try
{
fileName = System.Configuration.ConfigurationManager.AppSettings["FileLocation"].ToString();
fileName += "JobDetails.xls";
ExcelObj = new Microsoft.Office.Interop.Excel.Application();
Excel.Workbook theWorkbook = (Excel.Workbook)ExcelObj.Workbooks.Open(fileName, 0, false, 5, "", "", true, Excel.XlPlatform.xlWindows, "", true, false, 0, false, true, false);
Excel.Sheets sheets = theWorkbook.Worksheets;
for (int sheetNum = 1; sheetNum <= sheets.Count; sheetNum++)
{
Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(sheetNum);
for (int i = 8; i <= 50; i++)
{
Excel.Range range = worksheet.get_Range("A" + i.ToString(), "AI" + i.ToString());
myvalues = (System.Array)range.Cells.get_Value(Type.Missing);
strArray = ConvertToStringArray(myvalues);
if (strArray[1].Equals("PSA Id") && strArray[2].Equals("Member Name") && strArray[3].Equals("Project Name"))
{
int j = i;
worksheet.Cells[j, 5] = Month; // Updated Month in the excel file.
foreach (MemberShift item in listOfJobPlan)
{
j++;
worksheet.Cells[j, 2] = item.MemberID.ToString("D" + 6);
worksheet.Cells[j, 3] = item.MemberName;
worksheet.Cells[j, 4] = inGroupName;
}
break;
}
}
}
}
catch (Exception ex)
{
string Log = "DataService";
if ((!(EventLog.SourceExists(Log))))
EventLog.CreateEventSource(Log, Log);
EventLog logEntry = new EventLog();
logEntry.Source = Log;
logEntry.WriteEntry("Message : " + ex.Message + "\n StackTrace : " + ex.StackTrace, EventLogEntryType.Error);
return false;
}
finally
{
ExcelObj.Workbooks.Close();
}
return true;