3

我有用于生成 Excel 的简单代码,该代码循环并生成 Excel 工作表。

        Excel.Application XlApp = null;
        Excel.Workbook workbook = null;
        Excel.Worksheet Ws = null;

        XlApp = new Excel.Application();
        XlApp.Visible = true;
        workbook = XlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
        Ws = (Excel.Worksheet)workbook.Worksheets[1];

        workbook.Worksheets.Add(Missing.Value,Missing.Value,  
        6, Missing.Value);

        for (int j = 0; j < 7; j++)
        {
             Ws = (Excel.Worksheet)workbook.Worksheets[j];
             Ws.Activate();
             Ws.Name = SheetName.ToString();//Sheetname has a Name 
        }

现在的问题是当我们运行这段代码时一切正常。但有时发生的情况是,在客户端没有生成它跳过的工作表名称之一。所以我们对他们的解决方案是尝试再次生成工作表,然后它工作正常,所以我的问题是为什么代码会跳过 sheetName(有时),尽管代码中没有问题。它是否必须与客户端其他正在运行的进程做任何事情?

4

1 回答 1

0

尝试这个:

Excel.Application XlApp = null;
Excel.Workbook workbook = null;
Excel.Worksheet Ws = null;

XlApp = new Excel.Application();
XlApp.Visible = true;
workbook = XlApp.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);

// here you get the first ws, index 1
Ws = (Excel.Worksheet)workbook.Worksheets[1];

workbook.Worksheets.Add(Missing.Value, Missing.Value,
6, Missing.Value);

var SheetName = "sheet_";
// here you should start from 1 (not from 0) and include 7 in the loop count
for (int j = 1; j <= 7; j++)
{
    // make sure that the ws name is unique
    SheetName=String.Format("sheet_{0}",j);
    Ws = (Excel.Worksheet)workbook.Worksheets[j];
    Ws.Activate();
    Ws.Name = SheetName;// this is already a string
}

XlApp.Quit();
于 2013-05-29T06:36:28.513 回答