如何在创建Excel

时间:2018-05-28 13:47:26

标签: c# excel epplus epplus-4

我正在使用EPPLUS库来创建带有数据表的excel文件。 我的存储过程中有这样的列:emp_name,sales,INR,marketing,INR 但是在excel文件中,它生成列名,如列名,如emp_name,sales,INR,marketing,INR1等。 如何防止在数据表中打印任何列名称或我缺少的任何其他配置?

代码:

        string BasePath = ConfigurationManager.AppSettings["BasePath"];
        string fileName = Guid.NewGuid().ToString() + ".xlsx";
        string FilePath = BasePath + fileName;

        using (ExcelPackage excel = new ExcelPackage())
        {
            ExcelWorksheet ws = 
            excel.Workbook.Worksheets.Add("WorkingReport");

            ws.Cells["A1"].LoadFromDataTable(data,false);
            ws.Row(1).Style.Font.Bold = true;

            ws.Column(1).Width = 10;
            ws.Column(2).Width = 20;
            ws.Column(3).Width = 20;
            ws.Column(4).Width = 20;

            FileInfo excelFile = new FileInfo(FilePath);
            ws.Protection.IsProtected = false;
            excel.SaveAs(excelFile);
         }

1 个答案:

答案 0 :(得分:1)

打印INR和INR1,因为您的数据表具有这些列。当在选择列表中多次选择同一列时,SQL会自动为列名添加别名,方法是在其末尾添加数字以区分两列。数据表不能具有重复的列名称。在您的情况下,第二个INR正在重命名为INR1。你可以试试

ws.Cells["A1"].LoadFromDataTable(data,true); //"PrintHeaders" true instead of false

但我认为你会得到相同的结果。

如果您可以以某种方式设法在加载数据后获取标题的单元格地址,则可以将值重写为 ws.Cells["A5"].Value="INR" 将覆盖" INR1"。 还有其他方法https://github.com/JanKallman/EPPlus/wiki/Addressing-a-worksheet