2017-08-04 310 views
0

之前,我總是使用TXLSWorkbook和SaveDialog從DBGrid中導出excel(.xls)。C++ Builder DBGrid在xlsx文件中導出到Excel

但是,現在導出的數據太大,.xls文件無法填充所有數據。

我試圖導出.xlsx文件,但TXLSWorkbook似乎不支持.xlsx文件。

當我打開.xlsx文件時,錯誤消息表示文件已損壞。

我錯過了什麼,或者我必須找到另一種方式導出.xlsx文件?

這是我的代碼。感謝收看。

TXLSWorkbook *WorkBook; 
IXLSWorksheet *WorkSheet; 
IXLSRange *Cells; 
int Row; 
TDateTime dt=Now(); 
String date = dt; 

date = FormatDateTime("yyyymmdd",date); 
FileName = date+".xls"; 
WorkBook = new TXLSWorkbook(); 

WorkSheet = WorkBook->Sheets->Add(); 

Cells = WorkSheet->Cells; 
. 
. 
. 
(input item to Cells...) 
. 
. 
. 
SaveDialog1->FileName = FileName; 
if(SaveDialog1->Execute() == true) { 

    WorkBook->SaveAs(SaveDialog1->FileName); 

} 

+0

我會推薦使用TDataset。您可以通過ADO直接保存爲Excel文件。如何設置連接字符串的外觀[這裏](https://www.connectionstrings.com/excel/) –

回答

1

我不喜歡張貼的答案,是使用其他第三方庫的建議,但在這種情況下,它可能是適當的。

參見:http://www.scalabium.com/sme/

這是可以從德爾福的應用程序數據庫導出數據到各種格式,包括Excel文件格式的庫。它不使用COM,所以不受Excel的COM實現限制,儘管我不確定TXLSWorkBook是否使用COM。 AFAIK,SMExport直接寫入Excel格式的文件。

有一個試用版,iirc。

+0

感謝您的分享! – kim

+0

但是我們可以導出到沒有第三方來源的xlsx文件嗎? – kim

+0

如果您知道如何編寫自己的代碼來將數據寫入xlsx格式的文件,那麼當然可以。我認爲MS已經發布了這個規範。 – MartynA