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 的人都可以更改模板。
我正在使用 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 的人都可以更改模板。