4

我正在尝试以编程方式将工作表添加到新的 Excel 文档中。

我的预期输出是名为“test1-20”的工作表,但我得到的是“Sheet1-19,test20”。

为什么这不起作用?

Workbook workbook;
Application objExcel;

objExcel = new Application();
objExcel.Visible = false;
objExcel.DisplayAlerts = false;

for (var i = 0; i < worksheets.Count; i++)
{
    workbook= objExcel.Workbooks.Add(Missing.Value);
    var worksheet = (Worksheet)workbook.Worksheets.get_Item(i + 1);
    worksheet.Name = string.Format("test{0}", i + 1);
}
4

2 回答 2

4

试试这个:

using System;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

void MyMethod()
{
    try
    {
        var _excel = new Excel();

        var wb = _excel.Workbooks.Add();
        var collection = new Microsoft.Office.Interop.Excel.Worksheet[20];

        for (var i = 19; i >= 0; i--)
        {
            collection[i] = wb.Worksheets.Add();
            collection[i].Name = String.Format("test{0}", i + 1);
        }

        for (var i = 0; i < 3; i++)
        {
            wb.Worksheets[21].Delete();
        }

        //collection is an array of worksheet objects,
        //the worksheet objects in your workbook.
        //You can access each individual worksheet and
        //work with it in the same way you access any object in an array

        var thisWorksheet = collection[9];
        var thisRange = thisWorksheet.Range["A1"];
        thisRange.Value = "Hello World";

        wb.SaveAs(@"c:\test\whatever.xlsx");
        wb.Close();
    }
    finally
    {
        Marshal.ReleaseComObject(_excel);
    }
}

默认情况下,您的 visible 属性设置为 false,因此无需显式执行此操作,上述代码中未显示任何警报,因此也不需要这样做。我已经测试了上面的代码并且可以确认它有效。

于 2012-09-14T14:02:59.233 回答
0

这是我的代码:

' first worksheet
If oExcel.Application.Sheets.Count() < 1 Then
    oSheet = CType(oBook.Worksheets.Add(), Excel.Worksheet)
Else
    oSheet = oExcel.Worksheets(1)
End If
oSheet.Name = "one"
oSheet.Range("B1").Value = "First One"

' second
If oExcel.Application.Sheets.Count() < 2 Then
    oSheet = CType(oBook.Worksheets.Add(), Excel.Worksheet)
Else
    oSheet = oExcel.Worksheets(2)
End If
oSheet.Name = "two"
oSheet.Range("B1").Value = "Second one"

' third
If oExcel.Application.Sheets.Count() < 3 Then
    oSheet = CType(oBook.Worksheets.Add(), Excel.Worksheet)
Else
    oSheet = oExcel.Worksheets(3)
End If
oSheet.Name = "three"
oSheet.Range("B1").Value = "Thrid"

' next
If oExcel.Application.Sheets.Count() < 4 Then
    oSheet = CType(oBook.Worksheets.Add(), Excel.Worksheet)
Else
    oSheet = oExcel.Worksheets(4)
End If
oSheet.Name = "four"
oSheet.Range("B1").Value = "Four"
于 2012-09-14T19:14:56.370 回答