C# 将数据表导入Excel文本将变为数字
您好,我只是想问一下,我正在尝试将数据表导入excel,其中一列变成指数,比如444201000100100变成4442exp8?这是我的剧本C# 将数据表导入Excel文本将变为数字,c#,export-to-excel,C#,Export To Excel,您好,我只是想问一下,我正在尝试将数据表导入excel,其中一列变成指数,比如444201000100100变成4442exp8?这是我的剧本 protected void btnExportfromDt_Click(object sender, EventArgs e) { string strFilename = "FinanceforBulkupload.xls"; UploadDataTableToExcel(LoadData(), strFilename); } pro
protected void btnExportfromDt_Click(object sender, EventArgs e)
{
string strFilename = "FinanceforBulkupload.xls";
UploadDataTableToExcel(LoadData(), strFilename);
}
protected void UploadDataTableToExcel(DataTable dtEmp,string filename)
{
string attachment = "attachment; filename="+filename;
Response.ClearContent();
Response.AddHeader("content-disposition", attachment);
Response.ContentType = "application/vnd.ms-excel";
string tab = string.Empty;
foreach (DataColumn dtcol in dtEmp.Columns)
{
Response.Write(tab + dtcol.ColumnName);
tab = "\t";
}
Response.Write("\n");
foreach (DataRow dr in dtEmp.Rows)
{
tab = "";
for (int j = 0; j < dtEmp.Columns.Count; j++)
{
Response.Write(tab + Convert.ToString(dr[j]));
tab = "\t";
}
Response.Write("\n");
}
Response.End();
}
protectedvoid btnexportfromt\u单击(对象发送方,事件参数e)
{
字符串strFilename=“FinanceforBulkupload.xls”;
UploadDataTableToExcel(LoadData(),strFilename);
}
受保护的无效上载DataTableToExcel(DataTable dtEmp,字符串文件名)
{
string attachment=“附件;文件名=“+filename;
Response.ClearContent();
AddHeader(“内容处置”,附件);
Response.ContentType=“application/vnd.ms excel”;
string tab=string.Empty;
foreach(数据列dtEmp.Columns中的数据列dtcol)
{
Response.Write(tab+dtcol.ColumnName);
tab=“\t”;
}
响应。写入(“\n”);
foreach(数据行dr在dtEmp.Rows中)
{
tab=“”;
对于(int j=0;j
在存储值之前,将单个引号预先附加到该值。而不是:
444201000100100
商店:
'444201000100100
必须写入单元格格式的文本,但我们用于写入单元格的方法不允许您添加格式,您应该尝试另一种方法来写入Excel文件您还可以将目标列的格式设置为文本类型(或您喜欢的任何Excel格式),为了防止它这样做,以及删除前导零和“通用”单元格格式规则的其他解释 在动态创建输出文档时,需要将特定列或整个工作表设置为具有此格式规则。在VBA中,此命令是:
Columns("A:A").NumberFormat = "@" ' This is the Text format
在C#中,您应该能够按照以下几点做一些事情:
Excel.Range rng = this.Application.get_Range("A:A");
rng.NumberFormat = "@";
然而,这需要一个对Excel对象的引用,并且从您现有的代码来看,目前您似乎没有引用它
Gary的学生答案也适用,但这样做会导致这些单元格忽略以后在Excel中打开时应用的任何格式。用户需要手动删除前导字符以按预期控制格式。您有其他人建议的不同选项 请理解,您正在生成的是CSV而不是Excel文件,因此您受到限制 由于单元格格式是excel属性,无法在CSV文件中指定,因此我建议使用EPPlus创建excel文件(.xlsx),并编写代码以指定TravelinGuy建议的列格式
如果您想坚持使用CSV,那么数据在Excel中的显示方式将受到限制。要么您接受Excel根据读取的数据推断数字格式,要么您在前面加上引号…不幸的是,在向Excel发送数据时,您必须手动执行次要编码。自动化API以及任何基于文本的文件格式(如CSV或(如您的情况)选项卡分隔文件)都是如此 在以下情况下,健壮的解决方案必须将单个
“
字符前置到字符串
- 字符串可以被解析为一个数字(Excel使用,但由于您使用的是C#,
就可以了)Double.TryParse
- 字符串已以记号(
)开头。(例如,如果字符串“
,Excel将其解释为'quoted'
,除非在前面加上另一个勾号--quoted'
)“quoted'
- 字符串以
字符开头。即使是CSV文件,Excel也将其解释为一个工作表函数。在前面打勾可防止出现这种情况(例如,=
)'=这不是工作表函数
如果您仍然觉得这是不可接受的,请知道,当您像这样手动编写文本文件时,您没有其他选择。如果您强烈反对,可以尝试使用或其他第三方工具来构建Excel工作簿。然而,考虑到看起来非常简单的用例,您几乎肯定会得到一个更复杂的解决方案,该解决方案速度较慢,需要更多的代码。我建议大家好好学习,然后按照上面的规则写一个简单的例行公事。谢谢你的帮助。。。有没有不使用Excel对象的选项?有没有链接建议?我不想使用网格。。我的设计是直接使用datatable到excel…另外,应该注意的是,您可以在输出的每个字符串前加一个勾号。然而,这对用户来说有点不友好。当用户打开工作簿时,他们将看到您想要的数据(初始标记不显示)。但是,当用户编辑单元格值时,他们将看到勾号。