[英]excel currency data changing according to regional setting
面对一个问题,我在MySQL表中有两列。 一种是货币英语格式(1.0000)和德语(1,0000),但是当我将数据从export导出到excel(custom)时,我的货币列数据不像数据库中那样来了。
示例-如果区域设置为英语(US)->货币(英语格式)-1.0000(正确)->货币(德语格式)-10,000(错误)
如果区域设置为德语(德国)->货币(英语格式)-10.000(错误)->货币(德语格式)-1,0000(正确)
我希望我的数据存在于表中。
有什么可以从excel方面完成的工作或在C#方面有任何建议吗?
我用过
cultureInfo。不变文化
但没有结果。
这是用于创建Excel文件的代码:
私人字串ExportToExcelFile(DataTable dtTable){
string tab = "";
StringBuilder sbldr = new StringBuilder();
if (dtTable.Columns.Count != 0)
{
foreach (DataColumn col in dtTable.Columns)
{
sbldr.Append(tab + col.ColumnName);
tab = "\t";
}
sbldr.Append("\n");
foreach (DataRow row in dtTable.Rows)
{
tab = "";
foreach (DataColumn column in dtTable.Columns)
{
string temp = row[column].ToString();
string txt = temp.ToString(CultureInfo.InvariantCulture);
if (column.ToString() == "Currency Rate(English)")
{
NumberFormatInfo nfi = new CultureInfo("en-US", false).NumberFormat;
// Displays a value with the default separator (".").
// Displays the same value with a blank as the separator.
nfi.NumberDecimalSeparator = ".";
//var priceAsDecimal = Decimal.Parse(temp, NumberStyles.Currency);
//string priceAsDecimal1=priceAsDecimal.ToString("C");
// double number = Convert.ToDouble(temp);
// string a=number.ToString("G", CultureInfo.InvariantCulture);
//sbldr.Append(tab + a);
sbldr.Append(tab + txt.ToString(nfi).Replace("\n", " ").Replace("\n\r", ";").Replace("\r", " ").Replace("0", "0"));
//sbldr.Append(tab + a.Replace("\n", " ").Replace("\n\r", ";").Replace("\r", " ").Replace("0", "0"));
}
//else if (column.ToString() == "Currency Rate(German)")
//{
// string txt = temp.ToString(cultureDe);
// sbldr.Append(tab + txt.ToString().Replace("\n", " ").Replace("\n\r", ";").Replace("\r", " ").Replace("0", "0"));
//}
else
{
sbldr.Append(tab + row[column].ToString().Replace("\n", " ").Replace("\n\r", ";").Replace("\r", " ").Replace("0", "0"));
}
tab = "\t";
}
sbldr.Append("\n");
}
}
return sbldr.ToString();
}
您的代码根本没有创建Excel文件。 它正在创建一个制表符分隔的字符串,您使用错误的内容类型和文件扩展名将其发送给客户端。
Excel可以很好地读取带分隔符的文件,但无法猜测创建它所使用的分隔符或代码页。 从“数据”选项卡打开文本文件时,Excel允许您指定定界符,代码页等。但是,当双击文件或尝试直接从浏览器中打开文件时(实际上是相同的),它可以不会显示对话框,并使用最终用户的区域设置和ANSI代码页。
使用EPPlus这样的库,创建真正的Excel文件实际上要容易得多。 你得到一个真正的Excel文件,也允许您应用格式,添加图表等,结果也更小了很多 xlsx
被压缩的XML。
图书馆的站点已经包含一个示例,该示例直接从服务器返回电子表格 。 删除自定义格式,很简单:
private void DumpExcel(DataTable tbl)
{
using (ExcelPackage pck = new ExcelPackage())
{
//Create the worksheet
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Demo");
//Load the datatable into the sheet, starting from cell A1. Print the column names on row 1
ws.Cells["A1"].LoadFromDataTable(tbl, true);
//Omitted formatting code
//Write it back to the client
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=ExcelDemo.xlsx");
Response.BinaryWrite(pck.GetAsByteArray());
}
}
格式化一系列单元格或整个列也很容易
//Example how to Format Column 1 as numeric
using (ExcelRange col = ws.Cells[2, 1, 2 + tbl.Rows.Count, 1])
{
col.Style.Numberformat.Format = "#,##0.00";
col.Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
}
该示例包含用于更改字体和颜色的类似代码
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.