c# - 强制 EPPLUS 以文本形式阅读

标签 c# epplus

我正在开发一个应用程序来读取 xlsx 文件,进行一些验证并插入数据库。不幸的是,当我尝试读取标记为数字的列(带有 EAN-13 代码的 fe)时,我得到了一个 int 的最小值。 用户看不到它,因为 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);
                }          
 }

这就是我枚举列的方式

   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 );
                }

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

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

我不想将 ExcelRange.Value 转换为 Array,它很丑陋而且非常有条件。

最佳答案

显然这是解决方案(虽然不是完整的代码,但您必须向数据表添加列)。我在 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);
 }

关于c# - 强制 EPPLUS 以文本形式阅读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29429797/

相关文章:

C# LINQ 如何从数据库中获取数据源?

c# - WPF Material 设计凸起按钮悬停状态

c# - 在程序集中搜索所有子类型?

c# - 如何使用 EPPlus 向现有 Excel 文件添加新工作表?

c# - 使用 epplus 将 Excel 保存为电子表格 xml 2003

c# - 关于 List<T> 和 WCF 的说明

c# - WCF中获取回调 channel 的IP地址

c# - 将 XLSM 转换为 XLSX

c# - 如何将基于字符串的时间转换为 hh :mm format in excel using EPPlus?

c# - EPPlus 图表 : how to plot vertical bar graph instead of the horizontal default