使用oledb導出2007格式的Excel文件


      使用C#,想把數據的導出為2007格式的Excel,擴展名為xlsx,開始使用如下的連接語句:

sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + fileName + ";" +
"Extended Properties='Excel 12.0;HDR=YES;'";

fileName里面指示的擴展名為xlsx,導出成功后一打開,提示:

打不開文件,后來把文件后綴改為xls可以打開,但沒有顯示“兼容模式”,且用winrar可以打開,是一個壓縮包來的,證明不是2003格式,但不是xlsx格式,后來發現還有一種格式,二進制格式保存的2007格式,后綴名為xlsb,把后綴改為這個,果然正常打開了。

      那么,怎么保存為xlsx格式呢?通過進一步查找,終於找到答案,需要使用下面的連接語句:

sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + fileName + ";" +
"Extended Properties='Excel 12.0 Xml;HDR=YES;'";

后面增加了Xml,就是保存成文本格式的Office Open XML格式。這樣就行了。

      上面的 HDR=YES 表示第一行是列名而不是數據。我實際使用中發現,不加這個,輸出的文件好像也沒什么不同。這個應該是針對讀取來用了,因為假如HDR=NO的時候,第一行也被當成數據來讀取了。而這個時候,由於列名一般為字符串,有可能導致一列中有多種不同的數據類型,可使用"IMEX=1"來檢索混合數據列。

      如果沒有這個引擎(例如沒有安裝office2007或以上版本),可到下面地址下載:

      Microsoft.ACE.OLEDB.12.0下載地址:http://www.microsoft.com/downloads/zh-cn/details.aspx?displaylang=zh-cn&FamilyID=7554f536-8c28-4598-9b72-ef94e038c891

      另外,2003格式的連接語句如下:

sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +

"Data Source=" + fileName + ";" +

"Extended Properties=Excel 8.0;";

      根據SaveFileDialog選擇的不同擴展名,自動選擇連接語句的代碼:

saveFileDialog.Filter = "Excel2003 files (*.xls)|*.xls|Excel2007 (*.xlsx)|*.xlsx|Excel2007二進制表 (*.xlsb)|*.xlsb";
...

if (fileName.EndsWith("xls"))
{
sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +

"Data Source=" + fileName + ";" +

"Extended Properties=Excel 8.0;";
}
else if (fileName.EndsWith("xlsx"))
{
sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + fileName + ";" +
"Extended Properties='Excel 12.0 Xml;HDR=YES;'";
}
else if (fileName.EndsWith("xlsb"))
{
sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + fileName + ";" +
"Extended Properties='Excel 12.0;HDR=YES;'";
}








免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM