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