2016-07-18 5 views
0

Я использую пакет nuget с именем ExcelDataReader в приложении MVC для чтения листа Excel и преобразования его в HTML. Все звуки goof, но я не могу читать специальный символ из Например, значение ячейки «59%», но его чтение 0,59.Сколько я могу получить точное значение строки из excel.Я использую следующий код в контроллере для чтения и отображения excel для html.ExcelDataReader 2.1.0: Чтение специального символа, такого как '%'

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

По возвращении datatable в View side я использую следующий код в 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 Image

ИЗОБРАЖЕНИЯ 2:

HTML

ответ

0

Вместо того чтобы использовать метод AsDataSet(), можно прочитать строку по одному и читать значение как строка. Недостатком этого является то, что вам нужно указывать столбцы один за другим, что является проблемой ремонтопригодности.

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

Я подозреваю, что AsDataSet() преобразует данные к соответствующему типу данных, именно поэтому вы видите преобразованное десятичное значение вместо фактического значения в Excel.

+0

Я пробовал, но его не работает. Также возвращается то же значение, что и 0,59. Есть ли другой способ? – Csharp

0

В настоящее время ExcelDataReader не предоставляет информацию о форматировании, он предоставляет вам необработанные значения, за исключением дат, преобразованных в DateTime.

Существует открытая проблема продления его для предоставления информации о форматировании, https://github.com/ExcelDataReader/ExcelDataReader/issues/215.