当我尝试使用OLEDB将Excel文件保存到C#上的DataTable时出现问题。
DataTable没有我的Excel文件的第一列,但是有一个额外的空列作为最后一列。我不知道我做错了什么。如果我的Excel文件有这样的东西:
ID,姓名,地址
DataTable列是:
姓名,地址,F3(空)
这是我的功能:
public DataTable GetExcel(string[] files, string sheetName, string pathName)
{
for (int i = 0; i < files.Length; i++)
{
string strConn = string.Empty;
if (string.IsNullOrEmpty(sheetName)) { sheetName = "Sheet1"; }
FileInfo file = new FileInfo(files[i]);
if (!file.Exists) { throw new Exception("Error, file doesn't exists!"); }
string extension = file.Extension;
switch (extension)
{
case ".xls":
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
break;
case ".xlsx":
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + file + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'";
break;
default:
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
break;
}
OleDbConnection cnnxls = new OleDbConnection(strConn);
OleDbDataAdapter oda = new OleDbDataAdapter(string.Format("select * from [{0}$]", sheetName), cnnxls);
oda.Fill(dataTable);
}
return dataTable;
}
谢谢!
答案 0 :(得分:0)
最后问题是Excel文件,我只是使用另一台计算机将所有内容复制到另一个Excel文件并运行。我不知道出了什么问题。
我希望我可以帮助别人。
感谢您的回答。
答案 1 :(得分:0)
我不知道这是不是你发生了什么事,但我希望能帮助别人。 当我遇到这个错误时,因为我的csv文件在它的开头有一个空格,这使得Excel忽略了它之后的所有内容 - 这是我想要使用的整个字符串(出于某种原因,Excel忽略了空白之后的所有内容在C#)。
您可以使用修剪,或者如果您想要更安全,请使用此正则表达式仅定位单词,数字和更多字符:
Sub uniDV()
Dim r As Range
For Each r In Selection
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=unik(Range("A1:H1"))
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Next r
End Sub
Public Function unik(rng As Range) As String
Dim c As Collection, r As Range
Set c = New Collection
On Error Resume Next
For Each r In rng
v = r.Value
c.Add v, CStr(v)
If Err.Number = 0 Then
unik = unik & "," & v
Else
Err.Number = 0
End If
Next r
On Error GoTo 0
unik = Mid(unik, 2)
End Function
答案 2 :(得分:0)
在excel的第一列上写入一个值后,它起作用了。当在第一列中找不到数据时,它会跳过它们。