我正在使用来自我的asp.net应用程序中的mssql服务器的数据创建Excel报告。这里是我的方法:HRESULT:0x800A03EC - 创建Excel文件时,它适用于我的计算机问题
[WebMethod]
public static string ExportToExcel(string sourcetype)
{
Microsoft.Office.Interop.Excel.Application oXL;
Microsoft.Office.Interop.Excel._Workbook oWB;
Microsoft.Office.Interop.Excel._Worksheet oSheet;
Microsoft.Office.Interop.Excel.Range oRng;
try
{
oXL = new Microsoft.Office.Interop.Excel.Application();
oXL.Visible = false;
oWB = (Microsoft.Office.Interop.Excel._Workbook)(oXL.Workbooks.Add(Missing.Value));
oSheet = (Microsoft.Office.Interop.Excel._Worksheet)oWB.ActiveSheet;
List<ExcelReport> dataToExport = APIClient.GetExcelReportData(Utility.getCurrentFilterId(), sourcetype);
oSheet.Cells[1, 1] = "Source";
oSheet.Cells[1, 2] = "UserName";
oSheet.Cells[1, 3] = "Name";
oSheet.Cells[1, 4] = "Message";
oSheet.Cells[1, 5] = "Title";
//oSheet.Cells[1, 6] = "Date";
int activeRow = 2;
for (int i = 0; i < dataToExport.Count; i++)
{
oSheet.Cells[activeRow, 1] = dataToExport[i].Source;
oSheet.Cells[activeRow, 2] = dataToExport[i].UserName;
oSheet.Cells[activeRow, 3] = dataToExport[i].Name;
oSheet.Cells[activeRow, 4] = dataToExport[i].Message;
oSheet.Cells[activeRow, 5] = dataToExport[i].MessageTitle;
//oSheet.Cells[activeRow, 6] = dataToExport[i].EntityDate;
activeRow++;
}
oSheet.get_Range("A1", "Z1").Font.Bold = true;
oSheet.get_Range("A1", "Z1").VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;
oRng = oSheet.get_Range("A1", "Z1");
oRng.EntireColumn.AutoFit();
oXL.Visible = false;
oXL.UserControl = false;
string strFile = "report" + System.DateTime.Now.Ticks.ToString() + ".xls";
string strCurrentDir = HttpContext.Current.Server.MapPath(".") + "\\ExcelReports\\";
oWB.SaveAs(strCurrentDir + strFile, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, null, null, false,
false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, false, false, null, null, null);
//oWB.SaveCopyAs(strCurrentDir + strFile);
oWB.Close(null, null, null);
oXL.Workbooks.Close();
oXL.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(oRng);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oXL);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oWB);
oSheet = null;
oWB = null;
oXL = null;
GC.Collect(); // force final cleanup!
//errLabel.Text = "<A href=http://" + strMachineName + "/ExcelGen/" + strFile + ">Download Report</a>";
//string result = "<a href=\"~/ExcelReports/" + strFile + ">Raporu İndir</a>";
string result = "ExcelReports/" + strFile;
return result;
}
catch (Exception theException)
{
String errorMessage;
errorMessage = "Error: ";
errorMessage = String.Concat(errorMessage, theException.Message);
errorMessage = String.Concat(errorMessage, " Line: ");
errorMessage = String.Concat(errorMessage, theException.Source);
return errorMessage;
}
}
它工作正常,在我的机器,并在该应用程序发布到,当我在VS 2010,然后按F5打开源代码服务器。但是,如果我尝试通过IIS访问我的应用程序使用浏览器,我得到HRESULT:0x800A03EC错误。
我尝试下面的命令:
appcmd set config -section:asp -enableParentPaths:true
我试着写权限授予我的文件夹中。
我试图从组件服务更改我的MS Excel应用程序设置。
但没办法!我无法得到它的工作。你有什么主意吗?我在配置中犯了错误吗?
由于提前,
我想打电话互操作 – Robert 2011-03-16 15:25:07
既然你没有提到它0x800A03EC == ERROR_INVALID_FLAGS时,你应该通过System.Missing.Value而不是null值的“桌面”文件夹中。但你不应该从IIS自动化Excel - 它[不正式支持](http://stackoverflow.com/questions/151005/create-excel-xls-and-xlsx-file-from-c/151014#151014)因为Excel假定它有一个交互式桌面。有[大量的XLS/XLSX生成库](http://stackoverflow.com/questions/151005/create-excel-xls-and-xlsx-file-from-c),你可以使用。 – Rup 2011-03-16 18:39:17