强制EPPLUS以文本形式阅读

Lun*_*tri 10 c# epplus

我正在开发一个应用程序来读取xlsx文件,进行一些验证并插入到数据库中.不幸的是,当我尝试读取标记为数字的列(带有EAN-13代码的fe)时,我得到了一个int的miniumum值.用户没有看到这个,因为Excel正确显示它.

如何让它以纯文本形式读取文件?我知道我可以使用OLEBD,但我还需要动态编辑文件,因此epplus ExcelPackage是最佳选择.

这是我使用的代码:

 FileInfo file = new FileInfo(path);
 MainExcel = new OfficeOpenXml.ExcelPackage(file);
 {
   var ws = MainExcel.Workbook.Worksheets.First();
   DataTable tbl = new DataTable();
        for (var rowNum = 1; rowNum <= ws.Dimension.End.Row; rowNum++)      //currently loading all file
                {
                    var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
                    var row = tbl.NewRow();
                    foreach (var cell in wsRow)
                    {
                        row[cell.Start.Column - 1] = cell.Text;
                    }
                    tbl.Rows.Add(row);
                }          
 }
Run Code Online (Sandbox Code Playgroud)

这就是我枚举列的方式

   foreach (var firstRowCell in ws.Cells[3, 1, 3, ws.Dimension.End.Column])
                {
                    System.Type typeString = System.Type.GetType("System.String") ;
                    tbl.Columns.Add( firstRowCell.Text , typeString );
                }
Run Code Online (Sandbox Code Playgroud)

对于可能关注的人,此处是文件(也适用于非谷歌用户):https: //drive.google.com/open?id = 0B3kIzUcpOx-iMC1iY0VoLS1kU3M&autuser = 0

我注意到ExcelRange.value属性是一个包含所有未格式化对象的数组.但是,一旦迭代ExcelRange中的单元格并请求cell.Text属性,它就已经被处理了.尝试在ExcelRange中修改ConditionalFormatting和DataValidation没有帮助(fe AddContainsText()) - @EDIT - >对于整个工作表都没有:-(

我不想将ExcelRange.Value作为数组转换,它很丑陋且非常有条件.

Lun*_*tri 12

显然这是解决方案(虽然不是完整的代码,但您必须向datatable添加列).我在Epplus中找不到指定"无格式化"的格式字符串,但是在这里你有它.

 var ws = MainExcel.Workbook.Worksheets.First();
 DataTable tbl = new DataTable();
 for (var rowNum = 1; rowNum <= ws.Dimension.End.Row; rowNum++)      
 {
     var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
     var array = wsRow.Value as object[,];

     var row = tbl.NewRow();
     int hhh =0;

     foreach (var cell in wsRow)
          {
           cell.Style.Numberformat.Format = "@";
           row[cell.Start.Column - 1] = cell.Text;
          }
     tbl.Rows.Add(row);
 }
Run Code Online (Sandbox Code Playgroud)

  • 为了添加一些说明,`[cell/range].Numberformat.Format = "@";` 将指定的单元格/范围格式化为生成的工作表中的文本(而不是常规、数字、货币、会计、短日期等) (2认同)