0

MSExcelからデータをインポートしています。私が書いたコードは、

var ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" +
    uploadfile.PostedFile.FileName + ";" + "Extended Properties=Excel 12.0;";
OleDbConnection objConn = new OleDbConnection(sConnectionString);

objConn.Open();
try
{
    var objCmdSelect = new OleDbCommand("select * from [Sheet1$]", objConn);
}

等々。

私には非常に一般的に見えるエラーが発生しました

MicrosoftOfficeAccessデータベースエンジンはオブジェクト'Sheet1$'を見つけることができませんでした。オブジェクトが存在し、その名前とパス名を正しく入力していることを確認してください

*

私のワークシート名のスペルは正しいですが、確認のために、以下のコードを実行しましたdt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables、null);

if(dt == null)
{
  return null;
}

var excelSheets = new String[dt.Rows.Count];
int i = 0;

// Add the sheet name to the string array.
foreach(DataRow row in dt.Rows)
{
  excelSheets[i] = row["TABLE_NAME"].ToString();
  i++;
}

*しかし、データテーブルがnullになりました。私の質問は、接続は正常に開かれていますが、Excelファイルからデータを読み取ることができません。 特別な認証が必要ですか? 上記のエラーが発生しているためです。

4

1 に答える 1

0

代わりに、Ace.OLEDBの場合は、Microsoft.Jet.OLEDBを試してみてください。似たようなものに直面したため、Jet.OLEDBに切り替えます。

    string MyExelFile = "C:\ Temp \ Sample.xls";
    string MyExcelSheet = "[Sheet1 $]";
    string StrConn = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" + MyExelFile + ";
拡張プロパティ=\"Excel8.0;HDR=はい;IMEX= 1 \" "; String MySQLSelect = "select * from" + MyExcelSheet + ""; DataTable Items = new DataTable();

System.Data.OleDb.OleDbConnection Cn = new System.Data.OleDb.OleDbConnection(); Cn.ConnectionString = StrConn; System.Data.OleDb.OleDbDataAdapter Da = new System.Data.OleDb.OleDbDataAdapter (MySQLSelect, Cn); Cn.Open(); Da.Fill(Items); Cn.Close(); </pre>
于 2012-06-20T12:00:25.440 に答える