繁体   English   中英

excel货币数据根据区域设置而变化

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM