为for循环生成多个工作表的唯一名称[关闭]

问题描述 投票:-3回答:2

我正在使用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";                          
} 
c# epplus epplus-4
2个回答
1
投票

您尚未显示名称的来源,但最好的方法是使用您用于填充工作表的同一数据源中某些字段的名称。

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

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

0
投票

在这行代码中:

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

您正在设置工作表名称,这就是您最终使用'Sheet1','Sheet2'等原因。将其更改为其他内容,您可以使工作表的名称不同。

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

© www.soinside.com 2019 - 2024. All rights reserved.