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

时间:2018-02-20 14:27:26

标签: c# epplus epplus-4

我使用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";                          
} 

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

在这行代码中:

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

您正在设置工作表名称,这就是为什么您最终选择了Sheet1&#39;,&#39; Sheet2&#39;等。 将其更改为其他内容,可以使工作表的名称不同。

现在,我不确定,如果您的问题是 ,您可以更改名称,或者 可以执行此操作,以使其独一无二。根据您的目标,您可以使用Guid's