Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 始终使用ExcelDataReader从Excel文件中获取字符串形式的数据_C#_Types_Exceldatareader - Fatal编程技术网

C# 始终使用ExcelDataReader从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 (

我的Excel文件中有一个单元格包含此数字:
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”部分)