【问题标题】:C# Create Excel workbook with 1 sheet by defaultC# 默认创建 1 张 Excel 工作簿
【发布时间】:2011-12-25 08:32:52
【问题描述】:

我正在尝试使用 C# COM 互操作创建一个 Excel 文件,但它似乎默认使用 3 张而不是空的或只有一张来创建它。 创建它需要什么 空的或只有一个:

Excel.Application xl = null;
Excel._Workbook wb = null;

// Create a new instance of Excel from scratch
xl = new Excel.Application();
xl.Visible = true;     
wb = (Excel._Workbook)(xl.Workbooks.Add(Missing.Value));

wb.SaveAs(@"C:\a.xls", Excel.XlFileFormat.xlWorkbookNormal,
 null, null, false, false, Excel.XlSaveAsAccessMode.xlShared,
 false, false, null, null, null);

【问题讨论】:

  • 我认为这是 Excel 中的默认行为。如果您打开 excel 并创建一个新文档,它有三个工作表。也许你只需要删除第二张和第三张。
  • 或者您可以尝试一个简单但方便的库 NPOI code.google.com/p/npoi,它为您提供了很大的灵活性,特别是对于基本到中级的 excel 功能。如果您的输出只需要从 Office 2010 或更高版本打开,您还可以考虑使用 OpenXML。 COM Interop 可能会在无人值守、非交互式客户端应用程序中给您带来很多问题。看到这个support.microsoft.com/kb/257757

标签: c# excel office-interop


【解决方案1】:
Excel.Application xl = null;
Excel._Workbook wb = null;

xl = new Excel.Application();
xl.SheetsInNewWorkbook = 1;
xl.Visible = true;

wb = (_Workbook)(xl.Workbooks.Add(Missing.Value));

【讨论】:

    【解决方案2】:

    看看MSDN对Workbooks.Add Method的解释。

    1. 试试Workbooks.Add(XlWBATemplate.xlWBATWorksheet),或者
    2. 查看是否可以将xl.SheetsInNewWorkbook 属性设置为0 或1。

    我继续验证了这一点。代码如下:

    using Microsoft.Office.Interop.Excel;
    using System.Reflection;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Application xl = null;
                _Workbook wb = null;
    
                // Option 1
                xl = new Application();
                xl.Visible = true;
                wb = (_Workbook)(xl.Workbooks.Add(XlWBATemplate.xlWBATWorksheet));
    
                // Option 2
                xl = new Application();
                xl.SheetsInNewWorkbook = 1;
                xl.Visible = true;
                wb = (_Workbook)(xl.Workbooks.Add(Missing.Value));
    
            }
        }
    }
    

    【讨论】:

    • 我使用了选项 2:“xl.SheetsInNewWorkbook =1”,这就解决了问题。
    • @Moti,很高兴为您提供帮助。在这里看到你的新人,如果答案是正确的,习惯上会接受答案(检查复选标记)。此外,还可以对有用的答案进行投票(向上箭头)。 :)
    • 似乎我至少 8 小时都无法回答这个问题,因为我有“•声誉低于 100 的用户在提问后 8 小时内无法回答自己的问题。您可以自行在 7 小时内回答。在此之前,请使用 cmets,或编辑您的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2023-03-12
    相关资源
    最近更新 更多