如題,要實作一個stringgrid的匯入匯出功能,我知道有很多人會回復我說之前有好多資料了。but由于用的是xe7,好多資料的程式運行都有錯,而且很多只是貼了一部分,上個月才開始接觸,求指導求稍微完整一點的代碼,因為急用只好厚著臉皮來求教了,
小女子在這里謝過各位了
uj5u.com熱心網友回復:
xe7還沒用 ,,糾結 關注下 。。。。。
uj5u.com熱心網友回復:
function ExportStrGridToExcel(Args: array of const): Boolean;
var
iCount, jCount: Integer;
XLApp: Variant;
Sheet: Variant;
I: Integer;
begin
Result := False;
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
VarClear(XLApp);
end;
try
XLApp := CreateOleObject('Excel.Application');
except
Exit;
end;
XLApp.WorkBooks.Add;
XLApp.SheetsInNewWorkbook := High(Args) + 1;
for I := Low(Args) to High(Args) do
begin
with TStringGrid(Args[I].VObject) do
begin
XLApp.WorkBooks[1].WorkSheets[I+1].Name := Name;
Sheet := XLApp.Workbooks[1].WorkSheets[Name];
for jCount := 0 to RowCount - 1 do
begin
for iCount := 0 to ColCount - 1 do
begin
Sheet.Cells[jCount + 1, iCount + 1] := Cells[iCount, jCount];
end;
end;
end;
end;
XlApp.Visible := True;
end;
uj5u.com熱心網友回復:
ccrun的代碼,供你參考讀取excel
void __fastcall TForm1::Button4Click(TObject *Sender)
{
StringGrid1->Cells[0][0]="序號";
StringGrid1->Cells[1][0]="交易碼";
StringGrid1->Cells[2][0]="開始時間";
StringGrid1->Cells[3][0]="內容";
StringGrid1->Cells[4][0]="金 額";
StringGrid1->Cells[5][0]="號碼";
int i=0;
StringGrid1->RowCount=2;
ADOQuery1->Open();
while(!ADOQuery1->Eof)
{
i++;
StringGrid1->Cells[0][i]=ADOQuery1->FieldByName("序號")->AsInteger;
StringGrid1->Cells[1][i]=ADOQuery1->FieldByName("交易碼")->AsString;
StringGrid1->Cells[2][i]=ADOQuery1->FieldByName("開始時間")->AsString;
StringGrid1->Cells[3][i]=ADOQuery1->FieldByName("內容")->AsString;
StringGrid1->Cells[4][i]=ADOQuery1->FieldByName("金 額")->AsInteger;
StringGrid1->Cells[5][i]=ADOQuery1->FieldByName("號碼")->AsString;
ADOQuery1->Next();
StringGrid1->RowCount++;
}
ADOQuery1->Close();
}
//---------------------------------------------------------------------------
匯出excel
//---------------------------------------------------------------------------
#include<Comobj.hpp>
#include<Utilcls.h>
//---------------------------------------------------------------------------
void __fastcall TForm1::SaveToExcel(char * FileName)
{
Variant ex,wk,sht,Range; //ole萬能變數,定義excel物件使用
int FieldType[10]={0,0,0,0,2,0,0,0};
try{
ex=CreateOleObject("Excel.Application"); //啟動Excel
wk=ex.OlePropertyGet("ActiveWorkBook");//創建作業簿物件
ex.OlePropertyGet("WorkBooks").OleFunction("Add");//添加一個作業薄
sht=ex.OlePropertyGet("ActiveSheet");//創建作業區
}
catch(...)
{
MessageDlg("無法啟動Excel,可能尚未安裝或檔案已經損壞!",mtError,TMsgDlgButtons()<<mbYes,0);
return;
}
int iSRow=0;
int iSCol=0;
char *cRange;
cRange=CountCol("A1:", StringGrid1->ColCount - iSCol, 1);
Range = sht.OlePropertyGet("Range",cRange);
Range.OleFunction("Merge", false);
//Range.OlePropertySet("VerticalAlignment", Edit1->Text.ToInt());//居中
Range.OlePropertySet("HorizontalAlignment",3);//居中
Range.OlePropertyGet("Interior").OlePropertySet("ColorIndex",24);
Range .OlePropertyGet("Borders",1).OlePropertySet("LineStyle",1);
Range .OlePropertyGet("Borders",2).OlePropertySet("LineStyle",1);
Range .OlePropertyGet("Borders",3).OlePropertySet("LineStyle",1);
Range .OlePropertyGet("Borders",4).OlePropertySet("LineStyle",1);
ex.OlePropertySet("Caption","查詢結果轉入EXCEL:");
ex.OlePropertySet("StatusBar"," 【SQL TOOLS】 WGHSoft.ICBC Tel:0571-87924880 Email: [email protected]");
sht.OlePropertySet("Name", "核對單");
sht.OlePropertyGet("Cells",1,1).OlePropertySet("Value","測 試 EXCEL");
sht.OlePropertyGet("Cells",1,1).OlePropertyGet("Font").OlePropertySet("Name","華文中宋");
sht.OlePropertyGet("Cells",1,1).OlePropertyGet("Font").OlePropertySet("Size",28);
int i=2;
for(int row=iSRow;row<StringGrid1->RowCount;row++,i++)
for(int j=1, col=iSCol;col<StringGrid1->ColCount;col++,j++){
if(i==2) ex.OlePropertyGet("Cells",j).OlePropertySet("ColumnWidth", StringGrid1->ColWidths[j-1]/7); //寬
if(i%2==0)
sht.OlePropertyGet("Cells",i,j).OlePropertyGet("Interior").OlePropertySet("Color",RGB(213,251,206));
else
sht.OlePropertyGet("Cells",i,j).OlePropertyGet("Interior").OlePropertySet("Color",RGB(188,244,254));
switch(FieldType[col-1]){
case 2:
if(BigData(StringGrid1->Cells[col][row].c_str()))
sht.OlePropertyGet("Cells",i, j).OlePropertySet("NumberFormatLocal","@");
break;
default:
sht.OlePropertyGet("Cells",i, j).OlePropertySet("NumberFormatLocal","@");
break;
}
sht.OlePropertyGet("Cells",i, j).OlePropertySet("Value", Trim(StringGrid1->Cells[col][row]).c_str());
}
cRange=CountCol("A2:", StringGrid1->ColCount - iSCol, i-1);
Range = sht.OlePropertyGet("Range", cRange);
Range .OleProcedure("Select");
Range .OlePropertyGet("Borders",1).OlePropertySet("LineStyle",1);//邊框
Range .OlePropertyGet("Borders",2).OlePropertySet("LineStyle",1);
Range .OlePropertyGet("Borders",3).OlePropertySet("LineStyle",1);
Range .OlePropertyGet("Borders",4).OlePropertySet("LineStyle",1);
Range .OlePropertySet("RowHeight", 20); //行高
sht.OleFunction("SaveAs",FileName); //表格保存
ex.OlePropertySet("Visible",(Variant)true); //使Excel可見
}
//----------------------------------------------
快速匯出excel
String RemoveExtendName(String sFileName)//去除后綴
{
String dFileName;
if(sFileName.Pos("."))
dFileName=sFileName.SubString(1,sFileName.Pos(".")-1);
else dFileName=sFileName;
return dFileName;
}
//----------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
String FileName=RemoveExtendName("c:/wsj.htm");
ToHtml(StringGrid1, FileName.c_str(),"測驗 StringGrid to Excel");
}
//---------------------------------------------------------------------------
uj5u.com熱心網友回復:
我以前寫過的OLE相關代碼,有一些瑕疵的。目前在我自己用的庫中,支持從ListView/StringGrid/DBGrid等控制元件中匯入/匯出到Excel/Csv/Word等格式,已經修正很多問題。uj5u.com熱心網友回復:

能分享一下嗎?
uj5u.com熱心網友回復:
我在05年時寫過一個將StringGrid、TreeView或DBGrid控制元件中的資料匯出到Excel或WPS表格的函式集,2011年01月完善到XE,目前完美支持XE全系列iExcelToolsW.cpp
#include "iExcelToolsW.h" // 一組資料匯出到Excel的工具集
// #include "iExcelToolsW.cpp" // 一組資料匯出到Excel的工具集
#ifndef _iExcelToolsW_cpp_
#define _iExcelToolsW_cpp_
/*
一個將StringGrid、TreeView或DBGrid控制元件中的資料匯出到Excel或WPS表格的函式集
www.plm.hk 撰寫于2005年09月,最后修改于2011年01月
*/
WideString ExcelRangeW[256]=
{
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
"AA","AB","AC","AD","AE","AF","AG","AH","AI","AJ","AK","AL","AM","AN","AO","AP","AQ","AR","AS","AT","AU","AV","AW","AX","AY","AZ",
"BA","BB","BC","BD","BE","BF","BG","BH","BI","BJ","BK","BL","BM","BN","BO","BP","BQ","BR","BS","BT","BU","BV","BW","BX","BY","BZ",
"CA","CB","CC","CD","CE","CF","CG","CH","CI","CJ","CK","CL","CM","CN","CO","CP","CQ","CR","CS","CT","CU","CV","CW","CX","CY","CZ",
"DA","DB","DC","DD","DE","DF","DG","DH","DI","DJ","DK","DL","DM","DN","DO","DP","DQ","DR","DS","DT","DU","DV","DW","DX","DY","DZ",
"EA","EB","EC","ED","EE","EF","EG","EH","EI","EJ","EK","EL","EM","EN","EO","EP","EQ","ER","ES","ET","EU","EV","EW","EX","EY","EZ",
"FA","FB","FC","FD","FE","FF","FG","FH","FI","FJ","FK","FL","FM","FN","FO","FP","FQ","FR","FS","FT","FU","FV","FW","FX","FY","FZ",
"GA","GB","GC","GD","GE","GF","GG","GH","GI","GJ","GK","GL","GM","GN","GO","GP","GQ","GR","GS","GT","GU","GV","GW","GX","GY","GZ",
"HA","HB","HC","HD","HE","HF","HG","HH","HI","HJ","HK","HL","HM","HN","HO","HP","HQ","HR","HS","HT","HU","HV","HW","HX","HY","HZ",
"IA","IB","IC","ID","IE","IF","IG","IH","II","IJ","IK","IL","IM","IN","IO","IP","IQ","IR","IS","IT","IU","IV"
};
Variant ex,newxls,sh;
int tExcelSumRow=0; // 取得Excel檔案可以使用的總行數,固定為65536
int tExcelSumCol=0; // 取得Excel檔案可以使用的總列數,固定為256
//---------------------------------------------------------------------------
int iStartupExcel( // 啟動Excel
// 重命名作業簿
WideString WorkbooksName
,
// 如果出錯是否彈出錯誤提示框
bool T_OSZE
){
try
{
ex=Variant::CreateObject((WideString)L"Excel.Application"); // 啟動Excel
//ex=Variant::CreateObject((WideString)L"et.Application"); // 如果沒有安裝Excel就使用WPS表格
}
//catch(...)
//catch(Exception &e)
catch(Sysutils::Exception &T_MFWV)
{
try
{
//ex=Variant::CreateObject((WideString)L"Excel.Application"); // 啟動Excel
ex=Variant::CreateObject((WideString)L"et.Application"); // 如果沒有安裝Excel就使用WPS表格
}
//catch(...)
//catch(Exception &e)
catch(Sysutils::Exception &T_VWLK)
{
if(true == T_OSZE) // 如果出錯是否彈出錯誤提示框
{
Application->BringToFront(); // 將應用程式置于激活狀態并且擁有焦點
MessageBox(
NULL
,
(
T_MFWV.Message+"\r\n"+T_VWLK.Message+L"\r\n發生意外!"
).w_str()
,
L"系統提示"
,
MB_OK|MB_ICONERROR // 一個確定按鈕和一個紅叉圖示
//MB_OK|MB_ICONSTOP // 一個紅叉圖示
//MB_OK|MB_ICONHAND // 一個紅叉圖示
//MB_OK|MB_SYSTEMMODAL // 在對話框的標題欄上加上windows標志
//MB_OK|MB_ICONQUESTION // 一個問號圖示
//MB_OK|MB_ICONEXCLAMATION // 一個黃三角的“!”號圖示
//MB_OK|MB_ICONASTERISK // 一個語言框的“!”號圖示
//MB_OK|MB_USERICON // 沒有圖示,但留出了圖示位置
//MB_OK // 沒有圖示,沒有留出圖示位置
);
}
return -1;
}
}
ex.OlePropertySet((WideString)L"Visible",(Variant)true); // 使Excel啟動后可見
//ex.OlePropertySet("Visible",(Variant)false); // 使Excel啟動后不可見
newxls=(ex.OlePropertyGet((WideString)L"Workbooks")).OleFunction((WideString)L"Add"); // 使用ExcelApp的Exec方法新建一新作業薄
sh=newxls.OlePropertyGet((WideString)L"ActiveSheet");
// 重命名作業表:
//sh.OlePropertySet("Name", "檔案明細"); // 重命名當前作業簿
if("" != WorkbooksName)
{
sh.OlePropertySet((WideString)L"Name", WorkbooksName); // 重命名當前作業簿
}
tExcelSumRow=sh.OlePropertyGet((WideString)L"Rows").OlePropertyGet((WideString)L"Count"); // 取得Excel檔案可以使用的總行數,固定為65536
tExcelSumCol=sh.OlePropertyGet((WideString)L"Columns").OlePropertyGet((WideString)L"Count"); // 取得Excel檔案可以使用的總列數,固定為256
return 0;
}
//---------------------------------------------------------------------------
void iCloseVariant( // 關閉Excel執行緒
){
ex=Unassigned;
newxls=Unassigned;
sh=Unassigned;
ex=NULL;
newxls=NULL;
sh=NULL;
// 結束,如果沒有如下代碼,EXCEL執行緒直到應用程式退出才結束
Variant Axl,Workbook,AxSheet,nms,bef,aft;
Axl=Unassigned;
Workbook=Unassigned;
AxSheet=Unassigned;
bef=Unassigned;
aft=Unassigned;
nms=Unassigned;
}
//---------------------------------------------------------------------------
int iStringGridToExcelW( // 通過OLE將DBGrid中的資料匯出到Excel的自定義函式
TStringGrid * StringGrid
,
// 重命名作業簿
WideString WorkbooksName
,
// 如果出錯是否彈出錯誤提示框
bool T_OSZE
){
if(NULL == StringGrid)
{
if(true == T_OSZE) // 如果出錯是否彈出錯誤提示框
{
Application->BringToFront(); // 將應用程式置于激活狀態并且擁有焦點
MessageBox(
NULL
,
L"控制元件不能為NULL"
,
L"系統提示"
,
MB_OK|MB_ICONERROR // 一個確定按鈕和一個紅叉圖示
//MB_OK|MB_ICONSTOP // 一個紅叉圖示
//MB_OK|MB_ICONHAND // 一個紅叉圖示
//MB_OK|MB_SYSTEMMODAL // 在對話框的標題欄上加上windows標志
//MB_OK|MB_ICONQUESTION // 一個問號圖示
//MB_OK|MB_ICONEXCLAMATION // 一個黃三角的“!”號圖示
//MB_OK|MB_ICONASTERISK // 一個語言框的“!”號圖示
//MB_OK|MB_USERICON // 沒有圖示,但留出了圖示位置
//MB_OK // 沒有圖示,沒有留出圖示位置
);
}
return -1;
}
int tGridRow=StringGrid->RowCount; // StringGrid總共的行數
int tGridCol=StringGrid->ColCount; // StringGrid總共的列數
if(
tGridRow<=0
||
tGridCol<=0
){
if(true == T_OSZE) // 如果出錯是否彈出錯誤提示框
{
Application->BringToFront(); // 將應用程式置于激活狀態并且擁有焦點
MessageBox(
NULL
,
L"行數或列數為0,沒有可匯出的資料"
,
L"系統提示"
,
MB_OK|MB_ICONEXCLAMATION // 一個黃三角的“!”號圖示
);
}
return -2;
}
if(
iStartupExcel( // 啟動Excel
// 重命名作業簿
WorkbooksName
,
// 如果出錯是否彈出錯誤提示框
T_OSZE
)!=0
){
// 此處在Excel的啟動函式中已經有提示框
return -3;
}
WideString str1; // 要入庫的資料
if(tGridRow>=tExcelSumRow)
{
tGridRow=tExcelSumRow-1;
}
if(tGridCol>=tExcelSumCol)
{
tGridRow=tExcelSumCol-1;
}
// 全部區域單元格格式設定
str1=L"A1:"+ExcelRangeW[tGridCol-1]+IntToStr(tGridRow);
sh.OlePropertyGet((WideString)L"Range",str1).OlePropertyGet((WideString)L"Borders").OlePropertySet((WideString)L"LineStyle",1); // 給指定單元格四周加上實線邊框
sh.OlePropertyGet((WideString)"Range",str1).OlePropertySet((WideString)"NumberFormatLocal",(WideString)L"@"); // 設定指定單元格格式為“文本”
// "@"前面必須使用(WideString)轉換在WPS下才好用
// WPS中如果L"@"前面不加(WideString)的話數字會顯示為形如“Tru1900”的形式,雙擊單元格后變為“1900-1-2”等
// 第一行格式設定
str1=L"A1:"+ExcelRangeW[tGridCol]+L"1";
sh.OlePropertyGet((WideString)L"Range",str1).OlePropertyGet((WideString)L"Font").OlePropertySet((WideString)L"Bold",true); // 設定第一行區域中所有單元格的字體為粗體字
sh.OlePropertyGet((WideString)L"Range",str1).OlePropertySet((WideString)L"HorizontalAlignment",3); // 居中
// 第一列格式設定
str1=L"A1:A"+IntToStr(tGridRow);
sh.OlePropertyGet((WideString)L"Range",str1).OlePropertyGet((WideString)L"Font").OlePropertySet((WideString)L"Bold",true); // 設定第一列區域中所有單元格的字體為粗體字
for(int i=0;i<tGridRow;i++) // 行數
{
for(int j=0;j<tGridCol;j++) // 列數
{
str1=StringGrid->Cells[j][i];
sh.OlePropertyGet((WideString)L"Cells",i+1,j+1).OlePropertySet((WideString)L"Value",str1); // 將字符寫入指定單元格
}
}
//for(int i=0;i<tGridCol;i++){ // 按照StringGrid列寬度設定Excel中對應的列寬度
//sh.OlePropertyGet((WideString)"Columns",i+1).OlePropertySet((WideString)"ColumnWidth",StringGrid->ColWidths[i]); // 設定指定區域所包含的所有列的列寬為28
//}//設定后的寬度比StringGrid中的大
iCloseVariant(); // 關閉Excel執行緒
return 0;
}
uj5u.com熱心網友回復:
接上面
//---------------------------------------------------------------------------
int iTreeViewToExcelW( // 通過OLE將TreeView中的資料匯出到Excel的自定義函式
TTreeView * TView
,
// 重命名作業簿
WideString WorkbooksName
,
// 如果出錯是否彈出錯誤提示框
bool T_OSZE
){
if(NULL == TView)
{
if(true == T_OSZE) // 如果出錯是否彈出錯誤提示框
{
Application->BringToFront(); // 將應用程式置于激活狀態并且擁有焦點
MessageBox(
NULL
,
L"控制元件不能為NULL"
,
L"系統提示"
,
MB_OK|MB_ICONERROR // 一個確定按鈕和一個紅叉圖示
//MB_OK|MB_ICONSTOP // 一個紅叉圖示
//MB_OK|MB_ICONHAND // 一個紅叉圖示
//MB_OK|MB_SYSTEMMODAL // 在對話框的標題欄上加上windows標志
//MB_OK|MB_ICONQUESTION // 一個問號圖示
//MB_OK|MB_ICONEXCLAMATION // 一個黃三角的“!”號圖示
//MB_OK|MB_ICONASTERISK // 一個語言框的“!”號圖示
//MB_OK|MB_USERICON // 沒有圖示,但留出了圖示位置
//MB_OK // 沒有圖示,沒有留出圖示位置
);
}
return -1;
}
int n=TView->Items->Count;
if(n<=0)
{
if(true == T_OSZE) // 如果出錯是否彈出錯誤提示框
{
Application->BringToFront(); // 將應用程式置于激活狀態并且擁有焦點
MessageBox(
NULL
,
L"行數為0,沒有可匯出的資料"
,
L"系統提示"
,
MB_OK|MB_ICONEXCLAMATION // 一個黃三角的“!”號圖示
);
}
return -2;
}
if(
iStartupExcel( // 啟動Excel
// 重命名作業簿
WorkbooksName
,
// 如果出錯是否彈出錯誤提示框
T_OSZE
)!=0
){
// 此處在Excel的啟動函式中已經有提示框
return -3;
}
WideString str1; // 要入庫的資料
int z=0;
for(int i=0;i<n;i++)
{
str1=TView->Items->Item[i]->Text;
if(TView->Items->Item[i]->Level>z)
{
z=TView->Items->Item[i]->Level;
}
sh.OlePropertyGet((WideString)L"Cells",i+1,TView->Items->Item[i]->Level+1).OlePropertySet((WideString)L"NumberFormatLocal", (WideString)L"@"); // 設定指定列單元格格式為“文本”,"@"不能使用L
sh.OlePropertyGet((WideString)L"Cells",i+1,TView->Items->Item[i]->Level+1).OlePropertySet((WideString)L"Value",str1); // 將字符寫入指定單元格
}
str1="A1:"+ExcelRangeW[z]+IntToStr(n);
sh.OlePropertyGet((WideString)L"Range",str1).OlePropertyGet((WideString)L"Borders").OlePropertySet((WideString)L"LineStyle",1); // 給指定單元格四周加上實線邊框//BCB XE
//sh.OlePropertyGet((WideString)"Range",("A1:"+ExcelRangeW[z]+IntToStr(n)).t_str()).OlePropertyGet((WideString)"Borders").OlePropertySet((WideString)"LineStyle",1); // 給指定單元格四周加上實線邊框//BCB2010
//sh.OlePropertyGet((WideString)"Range",("A1:"+ExcelRangeW[z]+IntToStr(n)).c_str()).OlePropertyGet((WideString)"Borders").OlePropertySet((WideString)"LineStyle",1); // 給指定單元格四周加上實線邊框//BCB6 AND 2009
//結束,如果沒有如下代碼,EXCEL執行緒直到應用程式退出才結束
iCloseVariant(); // 關閉Excel執行緒
return 0;
}
uj5u.com熱心網友回復:
再接上面
//---------------------------------------------------------------------------
int iDBGridToExcelW( // 通過OLE將DBGrid中的資料匯出到Excel的自定義函式
TDBGrid * Grid
,
// false=列名字,true=列標題
bool FieldName
,
// Excel啟動后是否可見,true=不可見,false=可見
bool Visible
,
// 是否停止重繪螢屏
bool ScreenUpdating
,
// 是否關閉Excel警告
bool DisplayAlerts
,
// 屏蔽大二進制檔案
bool Blob
,
// 屏蔽長文本text欄位
bool Memo
,
// 屏蔽格式化文本
bool FmtMemo
,
// 重命名作業簿
WideString WorkbooksName
,
// 如果出錯是否彈出錯誤提示框
bool T_OSZE
){
if(NULL == Grid)
{
if(true == T_OSZE) // 如果出錯是否彈出錯誤提示框
{
Application->BringToFront(); // 將應用程式置于激活狀態并且擁有焦點
MessageBox(
NULL
,
L"控制元件不能為NULL"
,
L"系統提示"
,
MB_OK|MB_ICONERROR // 一個確定按鈕和一個紅叉圖示
//MB_OK|MB_ICONSTOP // 一個紅叉圖示
//MB_OK|MB_ICONHAND // 一個紅叉圖示
//MB_OK|MB_SYSTEMMODAL // 在對話框的標題欄上加上windows標志
//MB_OK|MB_ICONQUESTION // 一個問號圖示
//MB_OK|MB_ICONEXCLAMATION // 一個黃三角的“!”號圖示
//MB_OK|MB_ICONASTERISK // 一個語言框的“!”號圖示
//MB_OK|MB_USERICON // 沒有圖示,但留出了圖示位置
//MB_OK // 沒有圖示,沒有留出圖示位置
);
}
return -1;
}
if(NULL == Grid->DataSource)
{
if(true == T_OSZE) // 如果出錯是否彈出錯誤提示框
{
Application->BringToFront(); // 將應用程式置于激活狀態并且擁有焦點
MessageBox(
NULL
,
L"DBGrid可能沒有與DataSource關聯"
,
L"系統提示"
,
MB_OK|MB_ICONERROR // 一個確定按鈕和一個紅叉圖示
//MB_OK|MB_ICONSTOP // 一個紅叉圖示
//MB_OK|MB_ICONHAND // 一個紅叉圖示
//MB_OK|MB_SYSTEMMODAL // 在對話框的標題欄上加上windows標志
//MB_OK|MB_ICONQUESTION // 一個問號圖示
//MB_OK|MB_ICONEXCLAMATION // 一個黃三角的“!”號圖示
//MB_OK|MB_ICONASTERISK // 一個語言框的“!”號圖示
//MB_OK|MB_USERICON // 沒有圖示,但留出了圖示位置
//MB_OK // 沒有圖示,沒有留出圖示位置
);
}
return -2; // DBGrid沒有與DataSource關聯
}
if(NULL == Grid->DataSource->DataSet)
{
if(true == T_OSZE) // 如果出錯是否彈出錯誤提示框
{
Application->BringToFront(); // 將應用程式置于激活狀態并且擁有焦點
MessageBox(
NULL
,
L"DBGrid可能沒有與資料集關聯"
,
L"系統提示"
,
MB_OK|MB_ICONERROR // 一個確定按鈕和一個紅叉圖示
//MB_OK|MB_ICONSTOP // 一個紅叉圖示
//MB_OK|MB_ICONHAND // 一個紅叉圖示
//MB_OK|MB_SYSTEMMODAL// 在 對話框的標題欄上加上windows標志
//MB_OK|MB_ICONQUESTION // 一個問號圖示
//MB_OK|MB_ICONEXCLAMATION // 一個黃三角的“!”號圖示
//MB_OK|MB_ICONASTERISK // 一個語言框的“!”號圖示
//MB_OK|MB_USERICON // 沒有圖示,但留出了圖示位置
//MB_OK // 沒有圖示,沒有留出圖示位置
);
}
return -3; // 沒有與資料集關聯
}
if(false == Grid->DataSource->DataSet->Active)
{
if(true == T_OSZE) // 如果出錯是否彈出錯誤提示框
{
Application->BringToFront(); // 將應用程式置于激活狀態并且擁有焦點
MessageBox(
NULL
,
L"資料集沒有開啟"
,
L"系統提示"
,
MB_OK|MB_ICONERROR // 一個確定按鈕和一個紅叉圖示
//MB_OK|MB_ICONSTOP // 一個紅叉圖示
//MB_OK|MB_ICONHAND // 一個紅叉圖示
//MB_OK|MB_SYSTEMMODAL// 在 對話框的標題欄上加上windows標志
//MB_OK|MB_ICONQUESTION // 一個問號圖示
//MB_OK|MB_ICONEXCLAMATION // 一個黃三角的“!”號圖示
//MB_OK|MB_ICONASTERISK // 一個語言框的“!”號圖示
//MB_OK|MB_USERICON // 沒有圖示,但留出了圖示位置
//MB_OK // 沒有圖示,沒有留出圖示位置
);
}
return -4; // 資料集沒有開啟
}
if(
iStartupExcel( // 啟動Excel
// 重命名作業簿
WorkbooksName
,
// 如果出錯是否彈出錯誤提示框
T_OSZE
)!=0
){
// 此處在Excel的啟動函式中已經有提示框
return -5;
}
WideString str1; // 要入庫的資料
int m=2; // 要寫入資料的行號,最小值為1
int n=Grid->FieldCount; // 列數
str1=L"A1:"+ExcelRangeW[n-1]+L"1";
//ShowMessage(("A1:"+iExcelRange[n-1]+"1").c_str());
sh.OlePropertyGet((WideString)L"Range",str1).OlePropertyGet((WideString)L"Font").OlePropertySet((WideString)L"Bold",(Variant)true);
sh.OlePropertyGet((WideString)L"Range",str1).OlePropertySet((WideString)L"HorizontalAlignment",3); // 居中
str1=L"A1:"+ExcelRangeW[n-1]+IntToStr(Grid->DataSource->DataSet->RecordCount+1);
sh.OlePropertyGet((WideString)L"Range",str1).OlePropertyGet((WideString)L"Borders").OlePropertySet((WideString)L"LineStyle",1); // 給指定單元格四周加上實線邊框
sh.OlePropertyGet((WideString)L"Range",str1).OlePropertySet((WideString)L"NumberFormatLocal",(WideString)L"@"); // 設定第一列單元格格式為“文本”
for(int i=0;i<n;i++)
{
if(true == FieldName)
{
str1=Grid->Columns->Items[i]->Title->Caption; // 取得列標題
}
else
{
str1=Grid->Columns->Items[i]->FieldName; // 取得列名字
}
try
{
sh.OlePropertyGet((WideString)L"Cells",1,i+1).OlePropertySet((WideString)L"Value",str1); // 將字符寫入指定單元格
}
catch(...)
{
sh.OlePropertyGet((WideString)L"Application").OlePropertySet((WideString)L"ScreenUpdating",(Variant)true); // 停止重繪螢屏后必須這樣恢復重繪才能看到單元格中的內容
//Excel的警告提示:
sh.OlePropertyGet((WideString)L"Application").OlePropertySet((WideString)L"DisplayAlerts",(Variant)true); // 打開Excel的警告提示,如提示保存等
ex.OlePropertySet((WideString)L"Visible",(Variant)true); // 使Excel啟動后可見
iCloseVariant(); // 關閉Excel執行緒
if(true == T_OSZE) // 如果出錯是否彈出錯誤提示框
{
Application->BringToFront(); // 將應用程式置于激活狀態并且擁有焦點
MessageBox(
NULL
,
L"未知錯誤"
,
L"系統提示"
,
MB_OK|MB_ICONERROR // 一個確定按鈕和一個紅叉圖示
//MB_OK|MB_ICONSTOP // 一個紅叉圖示
//MB_OK|MB_ICONHAND // 一個紅叉圖示
//MB_OK|MB_SYSTEMMODAL// 在 對話框的標題欄上加上windows標志
//MB_OK|MB_ICONQUESTION // 一個問號圖示
//MB_OK|MB_ICONEXCLAMATION // 一個黃三角的“!”號圖示
//MB_OK|MB_ICONASTERISK // 一個語言框的“!”號圖示
//MB_OK|MB_USERICON // 沒有圖示,但留出了圖示位置
//MB_OK // 沒有圖示,沒有留出圖示位置
);
}
return -6; // 資料集沒有開啟
}
}
Grid->DataSource->DataSet->First(); // 回傳首條
while(!Grid->DataSource->DataSet->Eof)
{
for(int i=0;i<n;i++)
{
if(Blob==true && Grid->Columns->Items[i]->Title->Column->Field->DataType == ftBlob)
{
continue; // 屏蔽大二進制檔案欄位,如image等欄位
}
else
if(Memo==true && Grid->Columns->Items[i]->Title->Column->Field->DataType == ftMemo)
{
continue; // 屏蔽text(長文本欄位,最大2G)欄位
}
else
if(Grid->Columns->Items[i]->Title->Column->Field->DataType == ftGraphic)
{
continue; // 屏蔽位圖欄位
}
else
if(FmtMemo==true && Grid->Columns->Items[i]->Title->Column->Field->DataType == ftFmtMemo)
{
continue; // 屏蔽格式化文本
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/95799.html
標籤:基礎類
