簡體   English   中英

Excel數據讀取器問題,列名稱和工作表選擇

[英]Excel Data Reader Issues, column Names, and Sheet Selection

我正在使用Excel Data Reader將一些數據讀入實體框架數據庫

下面的代碼正在運行,但我需要進一步改進

首先,IsFirstRowAsColumnNames似乎沒有按預期工作,我必須使用.Read。

我最初選擇特定紙張時的軟糖是已經破壞的計划,任何人都可以幫助這個excelReader.Name目前是沒有意義的,除非我可以專門循環或選擇我最初使用的工作表。閱讀因此實現沖突。

引用實際的列標題名稱來檢索數據而不是索引,例如var name = reader [“applicationname”]。SQL客戶端中的ToString();

如果我無法實現上述目標,是否可以使用更好的擴展我可以用於讀取Excel數據。

public static void DataLoadAliases(WsiContext context)
    {
        const string filePath = @"Alias Master.xlsx";

        var stream = File.Open(filePath, FileMode.Open, FileAccess.Read);

        var excelReader = filePath.Contains(".xlsx")
                      ? ExcelReaderFactory.CreateOpenXmlReader(stream)
                      : ExcelReaderFactory.CreateBinaryReader(stream);

       excelReader.IsFirstRowAsColumnNames = true;


        excelReader.Read(); //skip first row

        while (excelReader.Read())
        {

            if (excelReader.Name == "Alias Master")
            {
                var aliasId = excelReader.GetInt16(0);
                var aliasName = excelReader.GetString(1);

                //Prevent blank lines coming in from excel;
                if (String.IsNullOrEmpty(aliasName)) continue;

                context.Aliases.Add(new ApplicationAlias
                {
                    AliasId = aliasId,
                    Name = aliasName,
                });
            }
            else
            {
                excelReader.NextResult();
            }
        }

        excelReader.Close();
        context.SaveChanges();
    }

對於.XLSX文件我使用的是OpenXML SDK: http//www.microsoft.com/en-us/download/details.aspx?id = 30425

對於XLS文件,我使用OleDbConnection,如下所示:

 OleDbConnection oledbConn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath+ ";Extended Properties='Excel 12.0;HDR=NO;IMEX=1;';");
            oledbConn.Open();
            OleDbCommand cmd = new OleDbCommand();
            OleDbDataAdapter oleda = new OleDbDataAdapter();
            DataSet ds = new DataSet();

            DataTable dt = oledbConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
            string workSheetName = (string)dt.Rows[0]["TABLE_NAME"];

            cmd.Connection = oledbConn;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "SELECT * FROM [" + workSheetName + "]";

            oleda = new OleDbDataAdapter(cmd);

            oleda.Fill(ds, "Donnees");

            oledbConn.Close();
            return ds.Tables[0];
        DataTable DT = new DataTable(); 
        FileStream stream = File.Open(Filepath, FileMode.Open, FileAccess.Read);
        IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
        DataSet result = excelReader.AsDataSet();
        excelReader.Close();
        DT = result.Tables[0];

暫無
暫無

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

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