C# 始终使用ExcelDataReader从Excel文件中获取字符串形式的数据
我的Excel文件中有一个单元格包含此数字:C# 始终使用ExcelDataReader从Excel文件中获取字符串形式的数据,c#,types,exceldatareader,C#,Types,Exceldatareader,我的Excel文件中有一个单元格包含此数字:5892101102012990 以及包含混合数据(也包括字符串)的其他单元格 我得到这个细胞的数据如下: var filestream = File.Open(@"D:\111XLS\File.xlsx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); var reader = ExcelReaderFactory.CreateReader(filestream); while (
5892101102012990
以及包含混合数据(也包括字符串)的其他单元格我得到这个细胞的数据如下:
var filestream = File.Open(@"D:\111XLS\File.xlsx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
var reader = ExcelReaderFactory.CreateReader(filestream);
while (reader.Read())
{
var intt = int.Parse(textBox1.Text);
var v1 = reader.GetValue(intt);
var v2 = reader.GetValue(intt + 3);
listBox1.Items.Add(v1 ?? "");
listBox2.Items.Add(v2 ?? "");
}
当它返回到那个单元格时,我得到了这个:5.89210110201299E+15
如果我将Excel文件中的单元格格式更改为Special
(Excel假定它是一个邮政编码),它将返回准确的数字,但编辑Excel文件是无法选择的
我知道我可以使用reader.GetDouble(intt)获取数据代码>但由于内容混合,这将导致更多问题
关于告诉ExcelDataReader
不要将5892101102012990
转换为5.89210110201299E+15
的选项,有什么建议吗?看了14遍之后,我似乎不得不在这里回答我自己的问题
我刚刚尝试使用以下方法将5.89210110201299E+15
转换为正常数字:
Decimal.Parse("5.89210110201299E+15", NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint);
我不知道我以后是否会遇到问题
我仍然期待着一个更好的解决方案。
任何建议都将不胜感激。请考虑以下代码:
var number = 5892101102012990D;
Console.WriteLine(number.ToString());
Console.WriteLine(number.ToString("F0"));
输出:
5.89210110201299E+15
5892101102012990
您的结果听起来像是object.ToString()
的隐式行为,因此这可能是一个格式问题。如果您想要与Excel中显示相同的输出,您可能有兴趣使用库设置值的格式我建议您使用GetFieldType(int index)
函数,如下所示:
while (reader.Read())
{
var intt = int.Parse(textBox1.Text);
var v1 = reader.GetValue(intt);
var v2 = reader.GetValue(intt + 3);
var fieldType1 = reader.GetFieldType(intt);
var fieldType2 = reader.GetFieldType(intt + 3);
var value1 = v1 == null ? null: Convert.ChangeType(v1, fieldType1);
var value2 = v2 == null ? null: Convert.ChangeType(v2, fieldType2);
listBox1.Items.Add(value1?.ToString() ?? string.Empty);
listBox2.Items.Add(value2?.ToString() ?? string.Empty);
}
var valueString1 = value1?.TsString();
if (value1 != null && fieldType1 == typeof(double))
{
valueString1 = ((double)value1).ToString("####");
}
如果要在将格式字符串添加到列表之前使用格式字符串,请使用以下代码:
while (reader.Read())
{
var intt = int.Parse(textBox1.Text);
var v1 = reader.GetValue(intt);
var v2 = reader.GetValue(intt + 3);
var fieldType1 = reader.GetFieldType(intt);
var fieldType2 = reader.GetFieldType(intt + 3);
var value1 = v1 == null ? null: Convert.ChangeType(v1, fieldType1);
var value2 = v2 == null ? null: Convert.ChangeType(v2, fieldType2);
listBox1.Items.Add(value1?.ToString() ?? string.Empty);
listBox2.Items.Add(value2?.ToString() ?? string.Empty);
}
var valueString1 = value1?.TsString();
if (value1 != null && fieldType1 == typeof(double))
{
valueString1 = ((double)value1).ToString("####");
}
有没有一种方法可以动态地将文件流的单元格转换为字符串,然后将其提供给ExcelDataReader来解决此问题?您能否解释有关“F0”的更多信息?是否有关于ToString(“XX”)的参考资料?(我指的是“XX”部分)