我修改了在这里找到的代码,将 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 文件,其中包含 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”(第一个),不管它的名字是什么?或者,有没有办法以编程方式确定工作表名称并使用它?