c# - 需要将科学值(value)转化为文本

标签 c# asp.net excel epplus

我正在尝试将 csv 转换为 xls,其中有银行帐号(16 位)需要将其转换为文本

我尝试使用 EPPlus 包,通过它可以轻松生成 xls,但银行账户列被转换为科学值。还尝试将列转换为数字和文本,但那不起作用

    private void csvToXls(string source,string destination,string fileName)
    {
        string csvFileName = source;
        string excelFileName = destination+"/"+fileName+".xls";

        string worksheetsName = "sheet 1";

        bool firstRowIsHeader = false;

        var format = new ExcelTextFormat();
        format.Delimiter = '|';
        format.EOL = "\n";              // DEFAULT IS "\r\n";
                                        // format.TextQualifier = '"';

        using (ExcelPackage package = new ExcelPackage(new FileInfo(excelFileName)))
        {
            ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(worksheetsName);
            worksheet.Cells["A1"].LoadFromText(new FileInfo(csvFileName), format, OfficeOpenXml.Table.TableStyles.None, firstRowIsHeader);

            foreach (var cell in worksheet.Cells["C:C"])
            {
                cell.Value = Convert.ToString(cell.Value);

            }

            foreach (var cell in worksheet.Cells["AC:AC"])
            {
                cell.Value = Convert.ToString(cell.Value); 
            }
            worksheet.Cells["C:C"].Style.Numberformat.Format = "#0";
            worksheet.Cells["C:C"].Style.Numberformat.Format = "@";
            worksheet.Cells["AC:AC"].Style.Numberformat.Format = "@";


            package.Save();
        }
    }

需要将列转换为不具有科学值(value)的文本。请提出建议

输入:在下面的 test.csv 中有输入

IMDATA||12345678910124567895274|1|名称|||||||||测试|||||||||||测试||||3301003726558|TDATASTING|测试|27-09-2019

获取输出: Wrong Output

预期输出: Expected Output

最佳答案

您需要为每一列的 LoadFromText 方法提供 eDataTypes,如果没有为该列提供类型,它将设置为 General默认

因此,将 `eDataTypes 提供给 ExcelTextFormat。

我刚刚添加了 3 列并且效果很好。

public static void csvToXls(string source, string destination, string fileName)
{
    string csvFileName = source;
    string excelFileName = destination + "/" + fileName + ".xls";

    string worksheetsName = "sheet 1";
    bool firstRowIsHeader = false;

    var format = new ExcelTextFormat();
    var edataTypes = new eDataTypes[] { eDataTypes.String, eDataTypes.String, eDataTypes.String };
    format.DataTypes = edataTypes;
    format.Delimiter = '|';
    format.EOL = "\n";              // DEFAULT IS "\r\n";
                                    // format.TextQualifier = '"';
    using (ExcelPackage package = new ExcelPackage(new FileInfo(excelFileName)))
    {
        ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(worksheetsName);
        worksheet.Cells["A1"].LoadFromText(new FileInfo(csvFileName), format, OfficeOpenXml.Table.TableStyles.None, firstRowIsHeader);

        package.Save();
    }
}

您可以尝试手动阅读文本

public static  void csvToXls(string source, string destination, string fileName)
{
    string csvFileName = source;
    string excelFileName = destination + "/" + fileName + ".xls";

    string worksheetsName = "sheet 1";

    using (ExcelPackage package = new ExcelPackage(new FileInfo(excelFileName)))
    {
        ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(worksheetsName);

        var text = File.ReadAllText(source);
        var rows = text.Split('\n');

        for (int rowIndex = 0; rowIndex < rows.Length; rowIndex++)
        {
            var excelRow = worksheet.Row(rowIndex+1);

            var columns = rows[rowIndex].Split('|');

            for (int colIndex = 0; colIndex < columns.Length; colIndex++)
            {
                worksheet.Cells[rowIndex +1, colIndex +1].Value = columns[colIndex];
            }
        }

        package.Save();
    }
}

关于c# - 需要将科学值(value)转化为文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58133240/

相关文章:

c# - Ninject:实体对象不能被 IEntityChangeTracker 的多个实例引用

c# - 如何关闭 Visual Studio 的格式化选项?

asp.net - 如何取消上传

c# - 如果用户使用 ASP .Net Identity 通过外部登录提供程序登录,如何保存用户上次登录日期?

c++ - 如何编译/构建/链接 - XLNT 库?

c# - EF4 自引用关联 0..1 -> 1

c# - 如何在 C# 中的这种奇怪情况下创建通用列表

excel - SpecialCells(xlCellTypeVisible) 还包括隐藏/过滤的单元格

vba - Excel单元格共享相同的内存地址

c# - 如何使用 Json.NET 对特定属性进行驼峰式大小写?