我试图使用asp.net c#将数据写入excel模板文件。但是我得到了以下例外。
ExceptionType:“ System.Runtime.InteropServices.COMException” 消息:“ RPC服务器不可用。(HRESULT异常:0x800706BA)”
有时它适用于少量的行。我找不到问题所在。
try
{
int rowNumber = 5;
DataSet ds = ClsSystem.getReviewResponse();
Excel.Application myExcelApplication = null;
Excel.Workbook myExcelWorkbook = null ;
Excel.Worksheet myExcelWorkSheet = null;
//copy template
System.IO.File.Copy(excelFilePath, NewExcelFilePath);
myExcelApplication = new Excel.Application();
myExcelApplication.DisplayAlerts = false;
myExcelWorkbook = (Excel.Workbook(myExcelApplication.Workbooks._Open(NewExcelFilePath, System.Reflection.Missing.Value,
System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
System.Reflection.Missing.Value, System.Reflection.Missing.Value)); // open the existing excel file
myExcelWorkSheet = (Excel.Worksheet)myExcelWorkbook.Worksheets[1];
myExcelWorkSheet.Name = "Test sheet";
for (int n = 0; n < ds.Tables.Count; n++)
{
for (int i = 0; i < ds.Tables[n].Rows.Count; i++)
{
myExcelWorkSheet.Cells[rowNumber, "A"] = ds.Tables[n].Rows[i]["HeaderID"].ToString();
myExcelWorkSheet.Cells[rowNumber, "B"] = ds.Tables[n].Rows[i]["ResponseID"].ToString();
myExcelWorkSheet.Cells[rowNumber, "C"] = ds.Tables[n].Rows[i]["Region"].ToString();
myExcelWorkSheet.Cells[rowNumber, "D"] = ds.Tables[n].Rows[i]["Sector"].ToString();
myExcelWorkSheet.Cells[rowNumber, "E"] = ds.Tables[n].Rows[i]["Facility"].ToString();
myExcelWorkSheet.Cells[rowNumber, "F"] = ds.Tables[n].Rows[i]["Program"].ToString();
myExcelWorkSheet.Cells[rowNumber, "G"] = ds.Tables[n].Rows[i]["AuditDate"].ToString();
myExcelWorkSheet.Cells[rowNumber, "H"] = ds.Tables[n].Rows[i]["Auditor1"].ToString();
rowNumber++;
}
rowNumber++;
}
try
{
myExcelWorkbook.SaveAs(NewExcelFilePath, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
System.Reflection.Missing.Value, System.Reflection.Missing.Value, Excel.XlSaveAsAccessMode.xlExclusive,
System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
System.Reflection.Missing.Value, System.Reflection.Missing.Value); // Save data in excel
myExcelWorkbook.Close(true, NewExcelFilePath, System.Reflection.Missing.Value); // close the worksheet
myExcelApplication.Quit();
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (myExcelWorkSheet != null) Marshal.ReleaseComObject(myExcelWorkSheet);
if (myExcelWorkbook != null) Marshal.ReleaseComObject(myExcelWorkbook);
if (myExcelApplication != null) Marshal.ReleaseComObject(myExcelApplication);
}
}
catch (Exception ex)
{
if (myExcelApplication != null)
{
myExcelApplication.Quit(); // close the excel application
}
throw ex;
}
我想一次写500多行。
答案 0 :(得分:0)
不要完全动摇您的开发道路,但是我发现互操作库非常不可靠。我在ClosedXML方面取得了更大的成功。我每天写成千上万的行,并且从未遇到过与ClosedXML相关的问题。 https://github.com/ClosedXML/ClosedXML