面对一个问题,我在MySQL表中有两列。一个是货币英语格式(1.0000)和德语(1,0000),但是当我将数据从导出导出到excel(自定义)时,我的货币列数据不会像数据库中那样出现。
示例 - 如果区域设置是英语(美国)
- >货币(英文格式) - 1.0000(正确)
- >货币(德语格式) - 10,000(错误)
如果区域设置是德语(德国) - >货币(英文格式) - 10.000(错误) - >货币(德语格式) - 1,0000(正确)
我想要我的数据,因为它存在于我的表格中。
是否可以从excel方面做任何事情或在C#方面做任何建议?
我用过
cultureInfo.Invarientculture
但没有结果。
这是用于创建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();
}
答案 0 :(得分:0)
您的代码根本没有创建Excel文件。它正在创建制表符分隔的字符串,您使用错误的内容类型和文件扩展名将其发送到客户端。
Excel可以很好地读取分隔文件,但不能猜测使用哪个分隔符或代码页来创建它。当您从“数据”选项卡打开文本文件时,Excel允许您指定分隔符,代码页等。当您双击该文件,或尝试直接从浏览器打开它(实际上是相同的),它可以不显示对话框并使用最终用户的区域设置和ANSI代码页。
使用像EPPlus这样的库,创建一个真正的Excel文件更容易实现批次。你得到一个真正的Excel文件,它也允许你应用格式,添加图表等。结果也是 lot ,因为xlsx
是压缩的xml。
图书馆的网站已直接从服务器中包含an example that returns a spreadsheet。删除自定义格式,就像:
一样简单 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;
}
该示例包含更改字体和颜色的类似代码