ClosedXML 转换模板中的百分比

ClosedXML convert percentage in template

我正在使用 closedXML 生成一个包含 3 列的简单模板。

要创建此模板,我使用以下代码:

protected void btnTemplate_Click(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            var tipo = "TARGET";
            if (ddlTipo.SelectedValue == "RESULTADO")
            {
                tipo = "RESULTADO";
            }
            dt.Columns.AddRange(new DataColumn[3] { 
           new DataColumn("BU", typeof(string)),
          new DataColumn("MÉTRICA", typeof(string)),
          
          new DataColumn(tipo,typeof(string)) });
            //Exporting to Excel
            
            //Codes for the Closed XML
            using (XLWorkbook wb = new XLWorkbook())
            {
                
                var worksheet = wb.Worksheets.Add(dt, "BASE");
                worksheet.Cell("C1").DataType = XLDataType.Text;

                //wb.SaveAs(folderPath + "DataGridViewExport.xlsx");
                string myName = ("Template.xlsx");
                MemoryStream stream = GetStream(wb);// The method is defined below
                Response.Clear();
                Response.Buffer = true;
                Response.AddHeader("content-disposition",
                "attachment; filename=" + myName);
                Response.ContentType = "application/vnd.ms-excel";
                Response.BinaryWrite(stream.ToArray());
                Response.End();
            }


        }

它工作正常,问题在 C 列,它可以接收百分比,并且它更改了 excel 中的类型。

有没有办法在 closedXML 中强制将列 C 始终视为文本?不转换数字。我尝试使用 worksheet.Cell("C1").DataType = XLDataType.Text;强制作为文本,但它不起作用。

好吧我从来没有用过closedXML我评价EPPLUS(4.5.3.3版是完全免费的), 但是我有很多像你这样的情况,我所做的是将列的类型设置为文本, 在封闭的 xml 你可以做:

worksheet.Cell(rowIndex, columnIndex).Style.NumberFormat.Format = "@";

但是有一个更简单的解决方案适用于任何 Excel XML 库! 无需使用代码创建 excel 模板,您可以手动创建它并保存在项目中的文件夹中。使用 Excel 界面本身设置您想要的任何属性并保存它,然后使用关闭的 xml 打开文件并在您想要的任何位置设置值。最后 'save as' 某处(不要覆盖模板)并执行您需要的操作。

这样做有很多好处:

1 - 创建模板的时间(与编码相比)。

2 - 减少代码。

3 - 您可以更轻松地放置公式。

4 - 无需更改代码即可修改模板。

5 - 任何了解一点 Excel 的人都可以更改模板。