[英]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.