【问题标题】:Excel Automation in ASP.NETASP.NET 中的 Excel 自动化
【发布时间】:2014-02-03 03:30:08
【问题描述】:

我知道不推荐这种方法,应该不惜一切代价避免。所以请不要回答我使用第三方库或任何相关的东西

首先系统创建一个文件并在其中写入html来显示数据。系统通过使用 .xls 扩展名来欺骗 MS Excel,即使它包含的是 html。

目标: 我需要将其转换为 REAL XLS 文件。所以我想用COM打开它并保存为xls。

问题: 现在发生的事情是它抛出了一个我不知道它来自哪里的异常。在开发环境中它工作得很好。但是每当我们将其传输到服务器时。出现问题。我无法在服务器上调试(我知道我不能),但我认为我别无选择。这是抛出的异常

“/”应用程序中的服务器错误。

来自 HRESULT 的异常:0x800A03EC。

说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Runtime.InteropServices.COMException:来自 HRESULT 的异常:0x800A03EC。

来源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常来源和位置的信息。

堆栈跟踪:

[COMException (0x800a03ec):HRESULT 异常:0x800A03EC。]

PLDTGlobal.Remco.ExcelCOM.SaveFileAsXLS(字符串文件路径,字符串文件名,字符串路径)

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

版本信息:Microsoft .NET Framework 版本:1.1.4322.2032; ASP.NET 版本:1.1.4322.2032。

环境详情:

开发

Windows XP 专业版 SP3, 视觉工作室 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 中向 NETWORK SERVICE 帐户授予启动权限。

非常感谢您对问题的任何想法以及如何解决它。

【问题讨论】:

  • 看代码我不确定,但这里有大量的内存泄漏。 GC.Collect(); 等...应该在finally 中。
  • 如果文件包含 html,您希望它在 xls 中看起来如何?
  • 您是否搜索过错误代码0x800A03EC
  • @T.S. Excel 有时能够从 HTML 中提取表格数据。我不确定为什么 OP 选择 2 个有问题的东西(将 HTML 读取为 XLS 并在服务器上运行 Excel)同时尝试 - 一次一个会更容易(在服务器上运行 Excel 不会得到神奇的支持,但是一个一次坏主意可能很容易诊断)。
  • 那么我会说你必须做一些测试:首先将要在生产中创建的文件名(猜测它可能与开发版不同)和 RDP(如果可能的话)记录到生产中机器,手动保存一个同名同路径的文件,如果出现同样的错误,那么很可能是账号访问权限有问题,比如ASPNET对指定文件夹有写权限吗?另一个可能的问题是文件名 - 对于 excel,除了正常的无效字符外,它应该不存在“[]”。

标签: c# asp.net .net excel


【解决方案1】:

我不确定这是否可行。我确实在我的服务器上运行了一个开发环境,只是为了解决这些问题。我在 Visual Studio 2013 中编写了自动化 Excel 的代码,代码效果很好。当我将代码放入 IIS 7(2012 服务器)时,代码停止工作。根据我的研究,这是 Microsoft 设计的,因为他们不希望您这样做。我必须更改很多权限才能使其部分工作。最后,我无法让 Excel 显示,微软官方表示 Excel 会抛出错误,因为不支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 2021-05-16
    相关资源
    最近更新 更多