2014-10-06 36 views
1

我adapated代码我发现here到XLS转换成XML像这样:如何在不知道XLS文件的工作表名称的情况下安全地将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()); 
} 

这工作(XML文件被创建,以从上xls文件第一片材中的数据),只要。装载XLS文件中有一个名为“Sheet0”

如果我用这个行,而不是(这是我开始与示例代码有)片:工作表Sheet1

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

...我得到的,“ $不是有效的名字,请确保它不包括无效字符或标点,它不是太长

美元符号显然是必要的,因为如果我用这个:

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

...我得到的,” 的Microsoft Jet数据库引擎找不到对象'Sheet0'

那么,我可以依赖”Sheet0“始终是要转换的工作表的名称吗?我相当肯定我不能,所以我怎么能每次使用“sheet 0”(第一张),而不管它的名字是什么?或者,有没有办法以编程方式确定工作表名称并使用它?

+1

'如果我用这条线代替......'这看起来和你第一个例子中的一样。我认为这应该是'Sheet1 $'在那条线上? – 2014-10-06 17:19:49

+1

如果您想要检索Excel文件中的图纸名称,此[链接](http://www.codeproject.com/Articles/8096/C-Retrieve-Excel-Workbook-Sheet-Names)可能会有所帮助。 [This](http://support2.microsoft.com/default.aspx?scid=kb;en-us;Q257819)另请参阅“从Excel中检索数据源结构(元数据)”部分 – 2014-10-06 17:27:57

+0

是,错字(固定);感谢热门链接。 – 2014-10-06 17:29:58

回答

1

使用TableSchema可以使用OleDb提取Worksheet名称。

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