簡體   English   中英

c# 使用 oledb 從 excel 讀取錯誤

[英]c# wrong reading from excel with oledb

 private void OnCreated(object sender, FileSystemEventArgs e)
        {
            excelDataSet.Clear();
            string extension = Path.GetExtension(e.FullPath);
            if (extension == ".xls" || extension == ".xlsx")
            {
                string ConnectionString = "";
                if (extension == ".xls") { ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = '" + e.FullPath + "';Extended Properties=\"Excel 8.0;HDR=YES;\""; }
                if (extension == ".xlsx") { ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = '" + e.FullPath + "';Extended Properties=\"Excel 12.0;HDR=YES;\""; }

                using (OleDbConnection conn = new OleDbConnection(ConnectionString))
                {
                    conn.Open();
                    OleDbDataAdapter objDA = new OleDbDataAdapter("select * from [Sheet1$]", conn);
                    objDA.Fill(excelDataSet);
                    conn.Close();
                    conn.Dispose();
                }
            }
        }

這是我的代碼。 當我的 filewatcher 觸發時它正在工作。 問題是我讀取的 excel 文件有 1 行 header 和 3 行有值。 當我使用此代碼並檢查我的數據集行數時,我得到 9.. 我不知道它從哪里獲取 9,我做錯了什么嗎? 我檢查了最后 30-35 分鍾的代碼,但仍然找不到我做錯了什么。我得到了正確的列,但行不工作。 順便說一句,我不需要 header 行

更新:我的示例 excel 文件有 3 行,我得到 9 作為行數。 我只是復制了這些行並使我的文件成為 24 行 + 1 header 行,當我執行 rows.count 時,我得到了 24 作為答案。 所以它工作正常? 那是正常的嗎?

有一個Nuget叫Linq到Excel,我在幾個項目中都用這個nuget查詢里面的數據.csv和.xlsx文件沒有任何難度,很容易實現。 它的性能可能很差,但可以解決您的問題。

這是Linq 到 Excel的文檔

我強烈建議你看看 EPPLUS 庫https://github.com/JanKallman/EPPlus/wiki

在找到 EPPLUS 之前,我在 oledb 上遇到了很多麻煩。 創建和更新 excel 個文件非常容易使用。 那里有很多很好的例子,比如我如何使用 epplus 遍歷 excel 表中的行?

var package = new ExcelPackage(new FileInfo("sample.xlsx"));

ExcelWorksheet workSheet = package.Workbook.Worksheets[1];
var start = workSheet.Dimension.Start;
var end = workSheet.Dimension.End;
for (int row = start.Row; row <= end.Row; row++)
{ // Row by row...
    for (int col = start.Column; col <= end.Column; col++)
    { // ... Cell by cell...
        object cellValue = workSheet.Cells[row, col].Text; // This got me the actual value I needed.
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM