1

我在 MVC 应用程序中使用名为ExcelDataReader的 nuget 包来读取 Excel 工作表并将其转换为 HTML。听起来很愚蠢,但我无法从 excel 工作表中读取特殊字符。例如,单元格值为“59%”但其读数为 0.59 .那么我怎样才能从excel中获得完全相同的字符串值。我在Controller中使用以下代码来读取excel并将其显示为html。

public ActionResult ViewExcelFileData(long? id, int sheetindex)    
 {
 var excelfile = db.ExcelUpload.FirstOrDefault(x => x.FileID == id);
string filePath=        string.Format(Server.MapPath("~/App_Data/ExcelUploads/Labor_Excel/") + excelfile.FileName);
System.IO.File.GetAccessControl(filePath);
FileStream stream = System.IO.File.Open(filePath, FileMode.Open, FileAccess.Read);
IExcelDataReader reader = null;
if (excelfile.FileName.EndsWith(".xls"))
{
 reader = ExcelReaderFactory.CreateBinaryReader(stream);
}
else if (excelfile.FileName.EndsWith(".xlsx"))
{
 reader = ExcelReaderFactory.CreateOpenXmlReader(stream);
}
reader.IsFirstRowAsColumnNames = true;

DataSet result = reader.AsDataSet();
reader.Close();
return View(result.Tables[sheetindex]);
 }

通过在视图端返回数据表,我在 Cshtml 中使用以下代码。

<table class="gridtable" id="table-1">
                <thead class="fixed_headers">
                    <tr>
                        @foreach (DataColumn col in Model.Columns)
                        {
                            <th>@col.ColumnName</th>
                        }
                    </tr>
                </thead>
                <tbody>
                    @foreach (DataRow row in Model.Rows)
                    {
                        <tr>
                            @foreach (DataColumn col in Model.Columns)
                            {                                    
                                    <td>@row[col.ColumnName]</td>                                    
                            }
                        </tr>
                    }
                </tbody>
            </table>

那么在控制器端或视图端是否有可能获得59%而不是 0.59?

这是两张图片,一张属于excel,第二张是HTML。

图片:1

Excel 图像

图片 2:

HTML

4

2 回答 2

1

ExcelDataReader 当前不公开任何格式信息,它为您提供原始值,但转换为 DateTime 的日期除外。

关于扩展它以提供格式信息有一个未解决的问题,https://github.com/ExcelDataReader/ExcelDataReader/issues/215

于 2017-07-07T20:13:57.430 回答
0

AsDataSet()您可以逐一读取行并将值作为字符串读取,而不是使用该方法。这样做的缺点是您需要一一指定列,这是一个可维护性问题。

while (reader.Read())
{
    var value = reader.GetString(0); //Get value of first column
}

我怀疑AsDataSet()将数据转换为其各自的数据类型,这就是为什么您在 excel 中看到转换后的十进制值而不是实际值的原因。

于 2016-07-18T06:37:01.687 回答