如何在使用 EPPLUS 导出到 Excel 时删除 "Number Stored as Text" 提示?
How can I remove "Number Stored as Text" prompt upon Export To Excel using EPPLUS?
我已经使用 EPPLUS 将我的 gridview 数据导出到 excel,但是对于一些列,在打开导出的 excel 文件后,我有这个绿色标记 "Number Stored as Text" 提示。
我如何在导出到 excel 代码中将 datatype/convert 更改为特定列的编号,从指定列的第二行开始,因为第一行行是 header?
您应该将字符串保存为 int
而不是 string
。每当您希望单元格为数字时,只需将单元格输入转换为 int
.
这意味着,在填充数据时,请务必将其填充为 int
。
我已经在此处更新了您的代码。
检查添加的代码..
已编辑
假设你正在做的事情,我已经更改了你的 DataTable
的变量名。GridView1
是一个 GridView UI Control
而你将 DataTable Name
设为 GridView1
,代码可能会混淆什么是 GridView1
protected void EXPORT_BUTTON_Click(object sender, EventArgs e)
{
// Added Code
int parseValue;
bool isInt;
ExcelPackage package = new ExcelPackage();
ExcelWorksheet Grid = package.Workbook.Worksheets.Add("ORSA ASSESSMENTS");
DataTable dt = new DataTable();
for (int i = 0; i < dt.Columns.Count; i++)
{
// Update Type
dt.Columns.Add("column" + i.ToString(), typeof(int));
}
foreach (GridViewRow row in GridView1.Rows)
{
DataRow dr = dt.NewRow();
for (int j = 0; j < GridView1.Columns.Count; j++)
{
row.Cells[j].Text = row.Cells[j].Text.Replace(" ", " ");
// Added Code
isInt = int.TryParse(row.Cells[j].Text.Trim(), out parseValue);
// Added Code
if (isInt)
dr["column" + j.ToString()] = parseValue;
}
dt.Rows.Add(dr);
}
Grid.Cells["A1"].LoadFromDataTable(dt, true);
using (ExcelRange rng = Grid.Cells["A1:Z1"])
{
rng.Style.Font.Bold = true;
}
Grid.Cells[ORSA.Dimension.Address].AutoFitColumns();
var FolderPath = ServerName + DirectoryLocation + DirectoryFolder + ExportsFolder;
var filename = ExcelName + @"_" + ".xlsx";
var filepath = new FileInfo(Path.Combine(FolderPath, filename));
Response.Clear();
package.SaveAs(filepath);
Response.AddHeader("content-disposition", "attachment; filename=" + filename + ";");
Response.Charset = "";
Response.ContentType = "application/vnd.xlsx";
Response.TransmitFile(filepath.FullName);
Response.End();
}
这是我模拟的示例,是一个工作示例
protected void Page_Load(object sender, EventArgs e)
{
// Check
if (!IsPostBack)
{
DataTable dt = new DataTable();
// Create Column
for(int i = 0; i < 5; i++)
dt.Columns.Add("column" + i, typeof(int));
for (int i = 0; i < 10; i++)
dt.Rows.Add(i, i+1, i+2, i+3, i+4);
GenerateExcel(dt);
}
}
private void GenerateExcel(DataTable dt)
{
using (ExcelPackage pkg = new ExcelPackage())
{
ExcelWorksheet ws = pkg.Workbook.Worksheets.Add("Sheet1");
ws.Cells[1, 1].LoadFromDataTable(dt, true, OfficeOpenXml.Table.TableStyles.Light18);
pkg.SaveAs(new FileInfo("C:\Test.xlsx"));
}
}
我遇到过类似的问题。正如 Ordel Eraki 所说:不要将值字符串化:
workSheet.Cells[1, 1].Value = 2; // Value is object
workSheet.Cells[1, 1].Value = 2.ToString()
我已经使用 EPPLUS 将我的 gridview 数据导出到 excel,但是对于一些列,在打开导出的 excel 文件后,我有这个绿色标记 "Number Stored as Text" 提示。
我如何在导出到 excel 代码中将 datatype/convert 更改为特定列的编号,从指定列的第二行开始,因为第一行行是 header?
您应该将字符串保存为 int
而不是 string
。每当您希望单元格为数字时,只需将单元格输入转换为 int
.
这意味着,在填充数据时,请务必将其填充为 int
。
我已经在此处更新了您的代码。
检查添加的代码..
已编辑
假设你正在做的事情,我已经更改了你的 DataTable
的变量名。GridView1
是一个 GridView UI Control
而你将 DataTable Name
设为 GridView1
,代码可能会混淆什么是 GridView1
protected void EXPORT_BUTTON_Click(object sender, EventArgs e)
{
// Added Code
int parseValue;
bool isInt;
ExcelPackage package = new ExcelPackage();
ExcelWorksheet Grid = package.Workbook.Worksheets.Add("ORSA ASSESSMENTS");
DataTable dt = new DataTable();
for (int i = 0; i < dt.Columns.Count; i++)
{
// Update Type
dt.Columns.Add("column" + i.ToString(), typeof(int));
}
foreach (GridViewRow row in GridView1.Rows)
{
DataRow dr = dt.NewRow();
for (int j = 0; j < GridView1.Columns.Count; j++)
{
row.Cells[j].Text = row.Cells[j].Text.Replace(" ", " ");
// Added Code
isInt = int.TryParse(row.Cells[j].Text.Trim(), out parseValue);
// Added Code
if (isInt)
dr["column" + j.ToString()] = parseValue;
}
dt.Rows.Add(dr);
}
Grid.Cells["A1"].LoadFromDataTable(dt, true);
using (ExcelRange rng = Grid.Cells["A1:Z1"])
{
rng.Style.Font.Bold = true;
}
Grid.Cells[ORSA.Dimension.Address].AutoFitColumns();
var FolderPath = ServerName + DirectoryLocation + DirectoryFolder + ExportsFolder;
var filename = ExcelName + @"_" + ".xlsx";
var filepath = new FileInfo(Path.Combine(FolderPath, filename));
Response.Clear();
package.SaveAs(filepath);
Response.AddHeader("content-disposition", "attachment; filename=" + filename + ";");
Response.Charset = "";
Response.ContentType = "application/vnd.xlsx";
Response.TransmitFile(filepath.FullName);
Response.End();
}
这是我模拟的示例,是一个工作示例
protected void Page_Load(object sender, EventArgs e)
{
// Check
if (!IsPostBack)
{
DataTable dt = new DataTable();
// Create Column
for(int i = 0; i < 5; i++)
dt.Columns.Add("column" + i, typeof(int));
for (int i = 0; i < 10; i++)
dt.Rows.Add(i, i+1, i+2, i+3, i+4);
GenerateExcel(dt);
}
}
private void GenerateExcel(DataTable dt)
{
using (ExcelPackage pkg = new ExcelPackage())
{
ExcelWorksheet ws = pkg.Workbook.Worksheets.Add("Sheet1");
ws.Cells[1, 1].LoadFromDataTable(dt, true, OfficeOpenXml.Table.TableStyles.Light18);
pkg.SaveAs(new FileInfo("C:\Test.xlsx"));
}
}
我遇到过类似的问题。正如 Ordel Eraki 所说:不要将值字符串化:
workSheet.Cells[1, 1].Value = 2; // Value is object
workSheet.Cells[1, 1].Value = 2.ToString()