2010-04-15 31 views
0

我正在使用ASP.NET打開託管在服務器上的Excel 2003文檔。 excel電子表格由我的控制系統以外的系統生成,有5個命名工作表。我訪問數據在每個片材如下(換行添加用於可讀性):使用Jet訪問某些Excel工作表時出錯

string ExcelConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\sample.xls; 
    Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;\";"; 

OleDbDataAdapter myData = 
    new OleDbDataAdapter("SELECT * FROM [mysheet]", ExcelConn); 
myData.TableMappings.Add("Table", "mysheet"); 
myData.Fill(ExcelDS); 

這適用於5片3。另外兩個拋出這個錯誤:

=CELL("filename") 
c:\[sample.xls]mysheet 

The Microsoft Jet database engine could not find the object 'mysheet'. Make sure the object exists and that you spell its name and the path name correctly.

我已經通過審查,這產生在Excel中字符串的結尾在底部標籤審查文本,並四核對錶名稱

連接字符串被指定一次並重用於所有5張。

是否有可能需要使用與Excel中可見的名稱不匹配的字符串引用表單?也許隱藏的字符,空格等?是否有另一種方法來查找工作表的真實姓名?任何其他建議檢索這些數據?

注意:我無法修改Excel文檔(如果我可以用我的方式,我會使用SSIS導入CSV)。

我正在使用.NET 3.5/II6。

回答

1

嗯,我找到了一種方法來揭開紙張的實際名稱。

使用問題的連接字符串,我能做到這一點...

OleDbConnection conn = new OleDbConnection(ExcelConn); 
conn.Open(); 
... 
conn.Close(); 

隨着開放的連接,我可以使用調試器來檢索表名稱。

conn.GetSchema("Tables").Rows[0]["TABLE_NAME"] 
conn.GetSchema("Tables").Rows[1]["TABLE_NAME"] 
... 
conn.GetSchema("Tables").Rows[9]["TABLE_NAME"] 

我發現Excel文檔中有10個工作表名稱。這兩張導致錯誤的表單有一個與「$」後綴相似的名字。我認爲我在支持惡夢,因爲我願意在將它發送給我之前用Excel文檔打賭的人下注 - 但至少我知道如何提取數據。