HRESULT:0x800A03EC – 它创buildExcel文件时,在我的机器上的问题

我正在使用asp.net应用程序中的来自mssql服务器的数据创build一个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应用程序设置。

但没办法! 我无法得到它的工作。 你有什么主意吗? 我在configuration中犯了错误吗?

提前致谢,

我转载了你的问题..试了一下: oWB.SaveAs / oWB._SaveAs ( oXL.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet ).SaveAs / oWB.Application.ActiveWorkbook.SaveAs all throw exception:HRESULT:0x800A03EC。 ..

但我看到你尝试着:oWB.SaveCopyAs(strCurrentDir + strFile); 如果我下一步设置它的工作原理:

 oWB.Saved = true; oWB.SaveCopyAs( strCurrentDir + strFile ); 

为什么不使用SaveCopyAs

制作一个“桌面”文件夹,如下所示

 C:\Windows\SysWOW64\config\systemprofile\Desktop C:\Windows\System32\config\systemprofile\Desktop