Я знаю, что этот подход не рекомендуется и его следует избегать любой ценой. Поэтому, пожалуйста, не отвечайте мне на использование сторонней библиотеки или связанной с ней вещи.Автоматизация Excel в ASP.NET
Сначала система создает файл и записывает html внутри него для отображения данных. Система обманывает MS Excel, называя его расширением .xls, хотя в нем содержится html.
Цель: Мне нужно преобразовать его в файл REAL XLS. Поэтому я хочу открыть его с помощью COM и сохранить его как xls.
Проблема: Теперь случается так, что он дает исключение, которое я не знаю, откуда оно. В среде разработки он работает очень хорошо. но всякий раз, когда мы передаем его на сервер. Проблема возникает. Я не могу отлаживать сервер (я знаю, что не должен), но я думаю, что у меня нет другого выбора. Вот исключение брошено
Server Error in '/' Application.
Exception from HRESULT: 0x800A03EC.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x800A03EC.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[COMException (0x800a03ec): Exception from HRESULT: 0x800A03EC.]
PLDTGlobal.Remco.ExcelCOM.SaveFileAsXLS(String filePath, String fileName, String path)
PLDTGlobal.Remco.OtherFulfilments.BatchFiles.__InsertBDO.SaveRecord()
PLDTGlobal.Remco.OtherFulfilments.BatchFiles.__InsertBDO.cmdSave_Click(Object sender, EventArgs e)
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain() +1292
Version Information: Microsoft .NET Framework Version:1.1.4322.2032; ASP.NET Version:1.1.4322.2032.
Окружающая среда Детали:
DEV
Windows XP Professional SP3, Visual Studio 2003, .NET 1.1, MS EXCEL 11,0 Библиотека объектов
сервера
Windows Server 2008 R2 (x64)
Вот отрывок кода:
public ExcelCOM()
{
try
{
excelApp = new Excel.Application();
excelApp.Visible = true;
}
catch(Exception ex)
{
ErrorLogger logger = new ErrorLogger();
logger.WriteErrorLog(ex.Message, ex.StackTrace);
throw ex;
}
}
/// <summary>
/// Opens the xml file using Excel COM library and converts it to .xls(1997-2003) format
/// </summary>
/// <param name="filePath">complete file path from target file</param>
/// <param name="fileName">filename of the target</param>
/// <param name="path">new path where to save the .xls</param>
public void SaveFileAsXLS(string filePath, string fileName, string path)
{
object missingParam = System.Reflection.Missing.Value;
string fileToCreate = path + fileName.Substring(0, fileName.Length - 4);
try
{
if(!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
excelApp.Visible = false;
Excel.Workbook workBook = excelApp.Workbooks.Open(filePath, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
Excel.Worksheet workSheet1 = (Excel.Worksheet) workBook.Sheets.get_Item(1);
workSheet1.Name = "Sheet1";
workSheet1.SaveAs(fileToCreate, Excel.XlFileFormat.xlExcel9795, missingParam, missingParam, false, missingParam, missingParam, missingParam, missingParam, missingParam);
workBook.Close(missingParam, missingParam, missingParam);
GC.Collect();
GC.WaitForPendingFinalizers();
Marshal.ReleaseComObject(workSheet1);
Marshal.ReleaseComObject(workBook);
}
catch(Exception ex)
{
ErrorLogger logger = new ErrorLogger();
logger.WriteErrorLog(ex.Message, ex.StackTrace);
throw ex;
}
finally
{
excelApp.Quit();
Marshal.ReleaseComObject(excelApp);
}
}
Я попытался дать разрешение запуска для учетной записи сетевой службы в DCOMCNFG.
Любое представление о проблеме и о том, как ее решить, очень ценится.
Я не уверен, глядя на код, но здесь есть тонкие утечки памяти. 'GC.Collect();' etc ... должен находиться в 'finally'. – rhughes
Если файл содержит html, как вы ожидаете, что он будет выглядеть в xls? –
Вы искали код ошибки '0x800A03EC'? –