-1

Excel ファイルからデータを取得し、そのデータをデータベースに挿入する必要があります。データを取得しようとしていますが、HRESULT:0x800A03EC 例外エラーが発生し続けます。

私のコード:

  public void ReadFile()
        {
            try
            {
                Excel.Application ep = new Excel.Application();
                Excel.Workbook ewb = ep.Workbooks.Open(@"C:/Temp/Copy of AGCO Transport Schedule.xlsx");
                Excel.Worksheet ews = ewb.Sheets[1];
                Excel.Range range = ews.UsedRange;

                int rowCount = range.Rows.Count;
                int columnCount = range.Columns.Count;

                for (int i = 1; i < rowCount; i++)
                {
                    for (int j = 1; j < columnCount; j++)
                    {
                      string  str = (string)(range.Cells[i, j] as Excel.Range).Value2;
                        Console.WriteLine(str);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("YOLO "+e.Message);
            }
        }
    }

ここでユーザーから上記のコードの解決策を取得した後。ループ インデックスは 0 ではなく 1 に変更する必要があります。上記のコードを修正しました。しかし、問題は、Excel のデータから 2 列だけを選択する必要があるため、SQL を使用して Excel ファイルからデータを取得し続けたことです。しかし、今回は「ファイルの作成に失敗しました」というエラーが発生し続け、これは接続を開こうとすると発生します。

私のコード:

public void ReadExcelFile()
{
    string connectionString = string.Format(ConfigurationManager.ConnectionStrings["ExcelConnection"].ConnectionString.Replace("'", "\""), "@C:/Temp/Copy.xlsx");
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        try
        {
            connection.Open();
            string sqlCmd = "SELECT  * FROM [Ark1$]";
            using (OleDbCommand command = new OleDbCommand(sqlCmd, connection))
            {
                command.CommandType = System.Data.CommandType.Text;
                using (OleDbDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        Console.WriteLine(reader.ToString());
                    }
                }
            }

        }
        catch (Exception exception)
        {
            Console.WriteLine("ERROR in ReadExcelFile() method. Error Message : " + exception.Message);
        }
    }
}

誰でもこれで私を助けることができますか?

4

2 に答える 2

3

両方の for ループでループ カウントを 1 から開始してみてください。Excelファイルのインデックスは1から始まります。ゼロベースのインデックスではないと思います。

于 2012-11-13T11:48:28.920 に答える
3

追加したいこと:あなたの方法は遅いです-本当に、本当に遅いです。高速化するには、次の 2 つの方法があります。 EPPLUS を使用します。これは、Excel の読み取り/書き込み用の高速で無料のライブラリです。一度にExcelからデータを取得するには、データを範囲オブジェクトから配列(VB.netではdim values()= range.value2)に「プル」し、その配列を反復処理します。これは、各セルを列挙するよりもはるかに高速です。

于 2012-11-13T11:58:47.587 に答える