5

Excel Data Readerを使用して、一部のデータを Entity Framework データベースに読み込みます

以下のコードは機能していますが、さらに改良が必要です

まず IsFirstRowAsColumnNames が意図したとおりに機能していないようで、代わりに .Read を使用する必要があります。

私が最初に特定のシートを選択するために持っていたファッジは計画を台無しにしていました.誰でもこのExcelReader.Nameを手伝ってもらえますか?対立。

また、SQL クライアントの var name = reader["applicationname"].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();
    }
4

2 に答える 2

1

.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];
于 2014-02-18T10:11:01.137 に答える