簡體   English   中英

如何在不知道XLS文件的工作表名稱的情況下將XLS工作表安全地轉換為XML文件?

[英]How can I safely convert an XLS sheet to an XML file without knowing the XLS file's sheet name?

我調整了在這里找到的將XLS轉換為XML的代碼,如下所示:

try
{
    System.Data.OleDb.OleDbConnection MyConnection;
    System.Data.DataSet ds;
    System.Data.OleDb.OleDbDataAdapter MyCommand;
    String fullFilePath = @"C:\worldSeries2014\baltimoreOrioles.xls";
    MyConnection = new 
   System.Data.OleDb.OleDbConnection(String.Format("provider=Microsoft.Jet.OLEDB.4.0;Data 
   Source='{0}';Extended Properties=Excel 8.0;", fullFilePath));
    MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet0$]", 
      MyConnection);
    MyCommand.TableMappings.Add("Table", "Product"); // I don't know what this does
    ds = new System.Data.DataSet();
    MyCommand.Fill(ds);
    MyConnection.Close();
    ds.WriteXml(@"C:\MiscellaneousJones\os.xml");
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
} 

只要加載的.xls文件具有名為“ Sheet0”的工作表,此方法就可以工作(使用xml文件創建XML文件,並使用xls文件第一張工作表中的數據)

如果我改用這一行(這是我開始的示例代碼所具有的):

MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection);

...我得到“ Sheet1 $不是有效的名稱。請確保它不包含無效字符或標點符號,並且名稱不要太長

美元符號顯然是必需的,就像我使用此符號一樣:

MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet0]", MyConnection);

...我得到了,“ Microsoft Jet數據庫引擎找不到對象'Sheet0'

因此,我可以始終依靠“ Sheet0”作為要轉換的工作表的名稱嗎? 我可以肯定我不能,所以無論其名稱如何,如何分別使用“ sheet 0”(第一個)? 或者,是否可以通過編程方式確定工作表名稱並使用該名稱?

使用TableSchema ,可以使用OleDb提取工作表名稱。

dtSchema = conObj.GetOleDbSchemaTable( OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM