各位大俠教一下撒,沒有對excel進行過操作!我的需求是直接把stringgrid內容存到excel里面,不需要去選擇檔案存盤路徑檔案,直接點擊保存就存到程式目錄下,檔案名為Edit3的內容,還有怎么設定默認的檔案后綴名?


void __fastcall TZTE_SN::Button5Click(TObject *Sender)
{
if(Edit3->Text == "")
{
ShowMessage("請先生成路徑,后再點擊保存");
return;
}
SaveDialog1->DefaultExt = ".xls";//默認擴展名
//StrFileName->SaveToFile(Edit3->Text.c_str());
//SaveDialog1->FileName = Edit3->Text.c_str();
//AnsiString StrFileName=GetCurrentDir()+AnsiString(Edit3->Text.c_str());
// ShowMessage("保存完成");
//-------------保存資料到excel-----------------
/*
// AnsiString StrFileName = ExtractFilePath("Export.xls");
if(!FileExists(StrFileName))
{
MessageBox(Handle,"Excel檔案Export.xls不存在!","資訊提示",MB_OK);
return;
}
*/
Variant ExcelApp; //物件
Variant WorkBook1; //作業薄
Variant WorkSheet1; //作業表
Variant Range; //范圍
try
{
ExcelApp=Variant::CreateObject("Excel.Application");
}
catch(...)
{
MessageBox(Handle,"無法啟動Excel!","資訊提示",MB_ICONSTOP|MB_OK);
return;
}
ExcelApp.OlePropertySet("Visible",false);//設定Excel為不可見
//打開指定的Excel檔案,檔案中最好只設定一個Sheet
ExcelApp.OlePropertyGet("WorkBooks").OleProcedure("Open",StrFileName.c_str());
WorkBook1=ExcelApp.OlePropertyGet("ActiveWorkBook");
WorkSheet1=WorkBook1.OlePropertyGet("ActiveSheet");//獲得當前默認的Sheet
//清空EXCEL表的資料
int nRow=WorkSheet1.OlePropertyGet("UsedRange").OlePropertyGet("Rows").OlePropertyGet("Count");
int nCol=WorkSheet1.OlePropertyGet("UsedRange").OlePropertyGet("Columns").OlePropertyGet("Count");
for(int i=5;i<=nRow+1;i++)
WorkSheet1.OlePropertyGet("Rows",i).OlePropertySet("Value","");
//給Excel表賦值
for(int j=1;j<10;j++)
{
for(int i=1;i<10; i++)
{
AnsiString StrValue=https://bbs.csdn.net/topics/IntToStr(i*j);
WorkSheet1.OlePropertyGet("Cells",i+4,j).OlePropertySet("Value",StrValue.c_str());
}
}
AnsiString StrRange="A"+IntToStr(1)+":I"+IntToStr(nRow);//獲取操作范圍
Range=WorkSheet1.OlePropertyGet("Range",StrRange.c_str());
WorkBook1.OleProcedure("Save",Edit3->Text.c_str());//保存表格
WorkBook1.OleProcedure("Close");//關閉表格
ExcelApp.OleFunction("Quit");//退出Excel
//------------保存完成后,清空內容-------------
Edit3->Clear();
int i;
for(i=1;i<501;i++)
StringGrid1->Rows[i]->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TZTE_SN::StringGrid1Click(TObject *Sender)
{
StringGrid1->Options = StringGrid1->Options << goEditing;
}
//---------------------------------------------------------------------------
void __fastcall TZTE_SN::Button6Click(TObject *Sender)
{
int i;
for(i=0;i<501;i++)
{
StringGrid1->Cells[0][i+1]=i+1;
StringGrid1-> Cells[1][i+1] = "aaaaa ";
StringGrid1-> Cells[2][i+1] = "bbbbb ";
//String strCell = StringGrid1-> Cells[i+1][i+1];
// 使StrinGrid可編輯
}
Edit3->Text = FormatDateTime("YYYY-MM-DD hh-mm-ss",Now())+" ___";
//FormatDateTime("YYYY-MM-DD hh:mm:ss zzz",Now());
//獲取當前系統日期
}
//---------------------------------------------------------------------------
void __fastcall TZTE_SN::FormCreate(TObject *Sender)
{
StringGrid1->ColWidths[0] = 55;
StringGrid1->ColWidths[1] = 110;
StringGrid1->ColWidths[2] = 110;
StringGrid1-> RowHeights[0,0] = 25;
StringGrid1->Cells[0][0]="序號";
StringGrid1->Cells[1][0]="AAAAAAA_SN";
StringGrid1->Cells[2][0]="ZZZZZZZ_SN";
/*
for(int j=0;j<3;j++)
{
for(int i =0;i<500; i++)
{
this->StringGrid1->Cells[j+1][i+1]=IntToStr(i*j);
}
}
*/
int n;
for(n=0;n<500;n++)
{
// StringGrid的列數
//StringGrid1-> ColCount = n+1;
// StringGrid的行數
StringGrid1-> RowCount = n+2;
// 第i列的寬度
//StringGrid1-> ColWidths[n+1] = 50;
// 第i行的高度
StringGrid1-> RowHeights[0,n+1] = 20;
}
}
//---------------------------------------------------------------------------
uj5u.com熱心網友回復:
我沒有高手啊!uj5u.com熱心網友回復:
advstringgrid有非可視化控制元件與其相連進行excel匯出,但會彈出對話框進行保存!uj5u.com熱心網友回復:
很早以前我站上就有光紅的代碼,將StringGrid的資料匯出到Excel檔案。如果需要,留個信箱,我發給你就是了。uj5u.com熱心網友回復:
妖哥就是熱心人。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/123317.html
標籤:基礎類
