我创建了一个读取 Excel工作表的函数因此 excel 中有一个包含 值的字段0.01 但是当我读到这个值时,它会变成某个指数形式,如 1.2999999999999999E-2 所以当我通过<时它会抛出异常带有此值的em> 数据表 。所以我如何在代码中读取准确值 OR 避免这种情况。 这是我阅读excel表的代码 -
using (var sDoc = SpreadsheetDocument.Open(FileName, false))
{
bool emptyTable = false;
var sheets = sDoc.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>();
var relationshipId = sheets.First().Id.Value;
var worksheetPart = (WorksheetPart)sDoc.WorkbookPart.GetPartById(relationshipId);
var workSheet = worksheetPart.Worksheet;
var sheetData = workSheet.GetFirstChild<SheetData>();
var rows = sheetData.Descendants<Row>().Skip(IgnoreRows).ToList();
if (rows.Count == 0)
{
Results = dt;
emptyTable = true;
}
if (!emptyTable)
{
foreach (var cell in rows.ElementAt(0).Cast<Cell>())
{
dt.Columns.Add(GetCellValue(sDoc, cell));
}
foreach (var row in rows.Skip(1))
{
bool emptyRow = true;
var tempRow = dt.NewRow();
for (var i = 0; i < row.Descendants<Cell>().Count(); i++)
{
string rowValue = GetCellValue(sDoc, row.Descendants<Cell>().ElementAt(i));
tempRow[i] = rowValue;
emptyRow = emptyRow && String.IsNullOrWhiteSpace(rowValue);
}
if (!emptyRow)
{
dt.Rows.Add(tempRow);
}
else
{
break;
}
}
}
答案 0 :(得分:1)
您可以尝试这样的事情(for
循环中的代码块)
string rowValue = GetCellValue(sDoc, row.Descendants<Cell>().ElementAt(i));
if (i == 5) // index of column where you're expecting that value
{
decimal tempDecimal;
decimal.TryParse(rowValue, NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out tempDecimal);
rowValue = tempDecimal.ToString("0.##");
}
tempRow[i] = rowValue;
emptyRow = emptyRow && String.IsNullOrWhiteSpace(rowValue)
基本上,代码试图将特定列(在我的示例中为5)的值解析为decimal,然后将其转换回带有两个小数点的字符串。