强制EPPLUS作为文本读取

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

如何让它以纯文本forms读取文件? 我知道我可以使用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&autuser = 0

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

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

显然这是解决方案(不是完整的代码,你必须向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); } 

文件中的单元格是自定义格式的分数。 你是故意这样做的吗? 无论如何,如果你想保留这种格式,你也可以使用cell.Valuecell.RichText.Text来获取你的13位数字。

希望这可以帮助。