我正在尝试使用C#从Excel工作表中读取数据。但是在我正在阅读的一些专栏中有' /'在数据中。例如:123456/987654。 我就是这样,我只是得到空间。就像这样的表格:
111111
222222个
九十八万七千六百五十四分之一十二万三千四百五十六
333333个
我得到的结果如下:
111111个
222222个
333333个
您能告诉我这个问题/解决方法吗?
var fileName = string.Format("{0}\\ReleaseNoteValidation\\release notes.xlsx", Directory.GetCurrentDirectory());
string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=Excel 12.0;";
var adapter = new OleDbDataAdapter("SELECT * FROM [Latest fixes$]", connectionString);
var ds = new DataSet();
adapter.Fill(ds, "releaseNote");
DataTable data = ds.Tables["releaseNote"];
Console.WriteLine(data.Rows.Count);
foreach (DataRow row in data.Rows)
{
releaseNoteChangeList.Add(Convert.ToString(row["ChangeID"]));
Console.WriteLine(Convert.ToString(row["ChangeID"]));
}
答案 0 :(得分:1)
在Excel文档中将所有值格式化为文本,然后查看会发生什么。 为此,在Numeric&amp ;;旁边创建一个列。 AlphaNumeric值并创建一个类似= A1&“”的公式。复制并粘贴值,然后用新值替换原始列,并删除刚刚创建的列。
答案 1 :(得分:0)
我认为Microsoft.ACE.OLEDB.12.0
根据它可以读取的第一行猜测列数据类型。它假设整个列应该是数字。
因此,您没有空白单元格而NULL
值/
,因为您Text
不是数字字符。
您必须以某种方式将列限制为Select Cstr(col) ...
类型或手动执行。
我不一定熟悉ACE,但d = {e[0] : {e[1] : e[2] if len(e) == 3 else True} for e in d}
之类的东西可能有用。
答案 2 :(得分:0)
@tafia,谢谢你的回复。正如您所建议的那样,我通过更改连接字符串将所有数据更改为文本。
string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";