代码之家  ›  专栏  ›  技术社区  ›  Andrew Shepherd

来自.NET的Excel自动化-创建新工作表

  •  0
  • Andrew Shepherd  · 技术社区  · 16 年前

    我正在尝试一个看似简单的任务:使用C创建一个包含新工作表的新Excel文档。

    出于某种原因,我收到一个奇怪的COM错误(0x800A03EC)

    有没有人设法让这个工作?是否有人就如何解决此问题提出建议?

    我已经将其隔离到最小代码量中:

    using Microsoft.Office.Interop.Excel;
    using System.Diagnostics;
    
    namespace ExcelAutomation
    {
        public static class ExcelTests
        {
            public static void CreateWorksheet()
            {
                try
                {
                    var app = new Microsoft.Office.Interop.Excel.Application();
                    app.Visible = true;
                    var workBooks = app.Workbooks;
                    var newWorkbook = app.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
                    Worksheet existingWorksheet = (Worksheet)newWorkbook.Sheets[1];
    
                    Worksheet workSheet = (Worksheet)newWorkbook.Sheets.Add
                            (
                                null, // before
                                existingWorksheet,
                                null, // 1,
                                null //XlSheetType.xlWorksheet
                            );
                }
                catch (System.Runtime.InteropServices.COMException ex)
                {
                    Trace.WriteLine(string.Format("Caught COMException. Message: \"{0}\"", ex.Message));  
                }
            }
        }
    }
    

    输出窗口现在显示:

    捕获了ComException。消息:“来自hresult的异常:0x800a03ec”

    2 回复  |  直到 13 年前
        1
  •  1
  •   Andrew Shepherd    16 年前

    我犯的错误是使用 无效的 对于我不想设置的可选值。

    相反,我应该使用 System.Reflection.Missing.Value

            Worksheet workSheet = (Worksheet)newWorkbook.Sheets.Add
                    (
                        existingWorksheet, // before
                        System.Reflection.Missing.Value,
                        System.Reflection.Missing.Value, // 1,
                        System.Reflection.Missing.Value //XlSheetType.xlWorksheet
                    );