Closed
Description
I have in excel cell value "0682".
ExcelOpenXmlReader in function ReadSheetRow converts value to double on beginning. Is it correct approach? I though value returned by reader should be same as visible in excel workbook. For solving that issue i changed my code a bit:
if (_xmlReader.NodeType == XmlNodeType.Text && hasValue)
{
object o = _xmlReader.Value;
var style = NumberStyles.Any;
var culture = CultureInfo.InvariantCulture;
bool is_string = false;
if (null != a_t && a_t == XlsxWorksheet.N_inlineStr)
{
o = Helpers.ConvertEscapeChars(o.ToString());
if (_xmlReader.XmlSpace == XmlSpace.Preserve)
{
is_string = true;
}
}
else if (null != a_t && a_t == XlsxWorksheet.A_s) //if string
{
o = Helpers.ConvertEscapeChars(_workbook.SST[int.Parse(o.ToString())]);
is_string = true;
} // Requested change 4: missing (it appears that if should be else if)
else if (a_t == "b") //boolean
{
o = _xmlReader.Value == "1";
}
if (!is_string && a_s != null && !string.IsNullOrEmpty(o.ToString()))
{
XlsxXf xf = _workbook.Styles.CellXfs[int.Parse(a_s)];
double number;
long l_number;
int i_number;
if (IsDateTimeStyle(xf.NumFmtId) && double.TryParse(o.ToString(), out number))
{
o = Helpers.ConvertFromOATime(number);
}
else if (!xf.ApplyNumberFormat || xf.NumFmtId == 49)
{
o = o.ToString();
}
else if (int.TryParse(o.ToString(), NumberStyles.Integer, culture, out i_number))
{
o = i_number;
}
else if (long.TryParse(o.ToString(), NumberStyles.Integer, culture, out l_number))
{
o = l_number;
}
else if (double.TryParse(o.ToString(), NumberStyles.Any, culture ,out number))
{
o = number;
}
}
if (col - 1 < _cellsValues.Length)
_cellsValues[col - 1] = o;
}
Metadata
Metadata
Assignees
Labels
No labels