在 for 循环中为多个工作表生成唯一名称

Generate unique name for multiple worksheets in a for loop

我正在使用 for 循环生成一些工作表,我想给每个工作表一个唯一的名称。我得到的只是 Sheet1Sheet2Sheet3 等。

下面是我的代码:

var package = new ExcelPackage();

for (var i = 0; i < ds.Tables.Count; i++)
{
    var ws = package.Workbook.Worksheets.Add(String.Format("Sheet{0}", i));

    ws.Cells["A1"].LoadFromDataTable(i == 0 
        ? Transpose(ds.Tables[i].Copy()).DefaultView.ToTable() 
        : ds.Tables[i], true, TableStyles.Medium1);

    ws.Cells[ws.Dimension.Address].AutoFitColumns();
    ws.Cells["A:J"].Style.Numberformat.Format = "#,##0";                          
} 

在这行代码中:

var ws = package.Workbook.Worksheets.Add(String.Format("Sheet{0}", i));

您正在设置工作表名称,这就是为什么您以 'Sheet1'、'Sheet2' 等结尾的原因。 将其更改为其他内容,您的工作表将以不同的方式命名。

现在,我不确定,如果您的问题是 哪里 您可以更改名称或 如何 您可以这样做,使其独一无二。根据您的目标,您可以使用 Guid's.

您没有显示名称的来源,但最好的方法可能是使用您用来填充 sheet 的同一数据源中某个字段的名称。

这里有一种方法可以给它们每个唯一的名称,将它们存储在一个列表中,您可以使用当前使用的相同索引访问该列表。当然,您必须以某种方式确保名称在列表中的顺序正确:

var sheetNames = new List<string> { "Summary", "EmployeeData", "Benefits" };

for (var i = 0; i < ds.Tables.Count; i++)
{
    // Choose a name from the list or use 'Sheet1, 2, 3' if we don't have enough names
    var sheetName = i < sheetNames.Count 
        ? sheetNames[i] 
        : String.Format("Sheet{0}", sheetNames.Count - i);

    var ws = package.Workbook.Worksheets.Add(sheetName);