Я создаю отчет Excel, используя данные, поступающие с сервера mssql в моем приложении asp.net. Вот мой метод:
[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;
}
}
Он отлично работает на моей машине и на сервере, на котором опубликовано приложение, когда я открывал исходный код в версии 2010 и нажимал клавишу F5. Но если я пытаюсь получить доступ к своему приложению с помощью браузера через IIS, я получаю сообщение об ошибке HRESULT: 0x800A03EC.
Я попробовал следующую команду:
appcmd set config -section:asp -enableParentPaths:true
Я пытался дать разрешения на запись в мою папку.
Я пытался изменить настройки приложения MS Excel из Служб компонентов.
Но ни за что! Я не мог заставить это работать. Есть ли у вас какие-либо идеи? Я делаю ошибку в конфигурации?
Заранее спасибо,