ExcelDataReader 2.1.0: чтение специальных символов, таких как «%»

asp.net-mvc excel streamreader exceldatareader

727 просмотра

2 ответа

80 Репутация автора

Я использую пакет nuget с именем ExcelDataReader в приложении MVC, чтобы прочитать лист Excel и преобразовать его в HTML. Все звучит глупо, но я не могу прочитать специальный символ из листа Excel. Например, значение ячейки "59%", но чтение 0,59 Так как я могу получить точно такое же строковое значение из Excel. Я использую следующий код в контроллере для чтения и отображения 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]);
 }

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

Автор: Csharp Источник Размещён: 18.07.2016 04:26

Ответы (2)


0 плюса

1033 Репутация автора

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

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

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

Автор: Bon Macalindong Размещён: 18.07.2016 06:37

0 плюса

301 Репутация автора

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

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

Автор: Johan Appelgren Размещён: 07.07.2017 08:13
Вопросы из категории :
32x32