Oledb跳过excel文件的第一列

时间:2017-05-02 08:12:29

标签: c# excel oledb

当我尝试使用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;
    }

谢谢!

3 个答案:

答案 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的第一列上写入一个值后,它起作用了。当在第一列中找不到数据时,它会跳过它们。