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);
    }
}

表示プロパティはデフォルトで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 に答える