2
誰かが私を助けることができれば非常に感謝します。私は別のシート(ヘッダーは固定されていません)を持つExcel(.xlsx、Excel 2007)を読み込もうとしています。以下のコードはほとんどの場合私には役に立ちますが、いくつかのケースでは例外がスローされます。C#の例外:外部テーブルが期待どおりの形式ではありません。使用している間にoledbとexcel
public static bool ReadExcelData(string ExcelFilePath, string SheetName, out DataTable dt)
{
dt = new DataTable();
bool isXlsx = ExcelFilePath.Substring(ExcelFilePath.LastIndexOf('.') + 1).ToLower() == "xlsx";
string excelConnectString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + ExcelFilePath + ";Extended Properties=\"Excel 8.0;HDR=yes;\"";
if (isXlsx)
excelConnectString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ExcelFilePath + ";Extended Properties=\"Excel 12.0\";";
OleDbConnection objConn = null;
try
{
objConn = new OleDbConnection(excelConnectString);
if (objConn.State == ConnectionState.Closed)
{
objConn.Open();
dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
}
}
catch (Exception ex)
{
dt = null;
return false;
}
try
{
dt.Clear();
string query = "select * from ["+SheetName+"$] ";
OleDbCommand objCmd = new OleDbCommand(query, objConn);
OleDbDataAdapter objDatAdap = new OleDbDataAdapter();
objDatAdap.SelectCommand = objCmd;
objDatAdap.Fill(dt);
Boolean result = (dt.Rows.Count >= 1) ? true : false;
objConn.Close();
return true;
}
catch (Exception ex)
{
dt = null;
return false;
}
}
例外の場合には、私は(その上、それはエラーを与えている)を手動でコードに行く前に(エクセルをダブルクリック)このエクセルを開く、場合、それはすべての例外を生成しない、ということを読み込みますスムーズに優れています。
すべてのケースでうまくいくように、より良い方法または代替方法がありますか?
有効なExcelファイルと、そうでないExcelファイルを提供できますか? –
と例外メッセージが役に立つでしょう – Vladimir
@Vladimir、例外は - 「外部テーブルが期待されたフォーマットではありません」 –