请教!怎么把chart画出的图导出到excel?

derek52033 2013-09-04 04:09:25
本人新手,刚接手BCB,上面的listview 按老妖的已经导出(附上代码),下面的chart怎么导出?



 if(SaveDialog1->Execute())
{
Variant vExcelApp, vSheet , Range , Chart;
try
{
vExcelApp = Variant::CreateObject("Excel.Application");
}
catch(...)
{
MessageBox(0, "启动 Excel 出错, 可能是没有安装Excel.",
"ListView2Excel", MB_OK | MB_ICONERROR);
vExcelApp = Unassigned;
return;
}
DisplayInfoWhetherChanged(false);
AnsiString FilePath=SaveDialog1->FileName;
// 隐藏Excel界面
vExcelApp.OlePropertySet("Visible", true);
// 新建一个工作表
vExcelApp.OlePropertyGet("Workbooks").OleFunction("Add", 1); // 工作表
// 操作这个工作表
vSheet = vExcelApp.OlePropertyGet("ActiveWorkbook")
.OlePropertyGet("Sheets", 1);
// 设置Excel文档的字体
vSheet.OleProcedure("Select");
vSheet.OlePropertyGet("Cells").OleProcedure("Select");
vExcelApp.OlePropertyGet("Selection").OlePropertyGet("Font")
.OlePropertySet("Size", Find_FileName_Info->Font->Size);
vExcelApp.OlePropertyGet("Selection").OlePropertyGet("Font")
.OlePropertySet("Name", Find_FileName_Info->Font->Name.c_str());
vExcelApp.OlePropertyGet("Selection").OlePropertyGet("Font")
.OlePropertySet("FontStyle", "常规");
vSheet.OlePropertyGet("Cells", 1, 1).OleProcedure("Select");
// 表格的行数
int nRowCount(Find_FileName_Info->Items->Count + 1);
nRowCount = nRowCount < 2? 2: nRowCount;
// 设置单元格的宽度
vExcelApp.OlePropertyGet("Columns",2).OlePropertySet("ColumnWidth",22);
// 设置单元格字体居中
vExcelApp.OlePropertyGet("Cells").OlePropertySet("HorizontalAlignment",3);
// 先将列名写入Excel表格
for(int j=0; j<Find_FileName_Info->Columns->Count; j++)
{

// 标题行的行高
vExcelApp.OlePropertyGet("Rows", 1).OlePropertySet("RowHeight", 20);
// 写入标题
vSheet.OlePropertyGet("Cells", 1, j + 1)
.OlePropertySet("Value",
Find_FileName_Info->Columns->Items[j]->Caption.c_str());
// 设置列名单元格的背景色
Variant vInter = vSheet.OlePropertyGet(
"Cells", 1, j + 1).OlePropertyGet("Interior");
vInter.OlePropertySet("ColorIndex", 15); // 灰色
vInter.OlePropertySet("Pattern", 1); // xlSolid
vInter.OlePropertySet("PatternColorIndex", -4105); // xlAutomatic
}
pTimes=Now().Val*100000;
// 将ListView中的数据写入Excel表格
for(int i=0; i<nRowCount - 1; i++)
{
//设置编号列的颜色
Variant vInter = vSheet.OlePropertyGet(
"Cells", i + 2, 1).OlePropertyGet("Interior");
vInter.OlePropertySet("ColorIndex", 15); // 灰色
vInter.OlePropertySet("Pattern", 1); // xlSolid
vInter.OlePropertySet("PatternColorIndex", -4105); // xlAutomatic


// 63 63 72 75 6E 2E 63 6F 6D
// 普通数据行的行高16
vExcelApp.OlePropertyGet("Rows", i + 2).OlePropertySet("RowHeight", 16);
//
vSheet.OlePropertyGet("Cells", i + 2, 1)
.OlePropertySet("Value", Find_FileName_Info->Items->Item[i]->Caption.c_str());
for(int j=0; j<Find_FileName_Info->Items->Item[i]->SubItems->Count; j++)
{
vSheet.OlePropertyGet("Cells", i + 2, j + 2)
.OlePropertySet("Value",
Find_FileName_Info->Items->Item[i]->SubItems->Strings[j].c_str());
}
}

//计时
cTimes=Now().Val*100000;
const AnsiString Precision="0.000";
Label7->Caption = FormatFloat(Precision,cTimes-pTimes) +" 秒";

// 保存Excel文档并退出
vExcelApp.OlePropertyGet("ActiveWorkbook")
.OleFunction("SaveAs", FilePath.c_str());
vSheet = Unassigned;
vExcelApp = Unassigned;

DisplayInfoWhetherChanged(true);
}
}
...全文
454 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongss 2013-09-05
  • 打赏
  • 举报
回复
试试这个
  ExcelApplication1->set_Caption(WideString("测试Test"));
  ExcelApplication1->set_Visible(0,true);

  ExcelWorkbook1->ConnectTo(ExcelApplication1->Workbooks->Add(TNoParam(), 0));
  ExcelWorksheet1->ConnectTo(ExcelWorkbook1->Worksheets->get_Item(TVariant(1)));
  RangePtr r;
  Chart1->CopyToClipboardBitmap();
  r = ExcelWorksheet1->get_Range(TVariant("a2"),TVariant("e13"));
  ExcelWorksheet1->Paste(TVariant(LPDISPATCH(r)), TNoParam(), 0);
derek52033 2013-09-05
  • 打赏
  • 举报
回复
引用 4 楼 lhylhy 的回复:
没必要导这种图吧,可以导数据让excel画。
现在把listview的数据已经导出excel而且能画出来,就是看能不能把chart画出来的图也导出
lhy 2013-09-05
  • 打赏
  • 举报
回复
没必要导这种图吧,可以导数据让excel画。
derek52033 2013-09-05
  • 打赏
  • 举报
回复
引用 2 楼 hongss 的回复:
用贴图的方式拷贝
能具体说说么?最好贴上代码,新人请体谅,谢谢
hongss 2013-09-05
  • 打赏
  • 举报
回复
用贴图的方式拷贝
derek52033 2013-09-05
  • 打赏
  • 举报
回复
怎么没人回复?妖哥帮忙解决解决~~~~~~那块叙述的不清楚可以告诉我
ccrun.com 2013-09-05
  • 打赏
  • 举报
回复
引用 11 楼 derek52033 的回复:
弄好了 ,谢谢妖哥,OLE专业户牛!
好了就赶紧结帖吧。
derek52033 2013-09-05
  • 打赏
  • 举报
回复
引用 6 楼 hongss 的回复:
试试这个
  ExcelApplication1->set_Caption(WideString("测试Test"));
  ExcelApplication1->set_Visible(0,true);

  ExcelWorkbook1->ConnectTo(ExcelApplication1->Workbooks->Add(TNoParam(), 0));
  ExcelWorksheet1->ConnectTo(ExcelWorkbook1->Worksheets->get_Item(TVariant(1)));
  RangePtr r;
  Chart1->CopyToClipboardBitmap();
  r = ExcelWorksheet1->get_Range(TVariant("a2"),TVariant("e13"));
  ExcelWorksheet1->Paste(TVariant(LPDISPATCH(r)), TNoParam(), 0);
虽然没用上你的,但还是谢谢
derek52033 2013-09-05
  • 打赏
  • 举报
回复
引用 10 楼 ccrun 的回复:
OLE专业户来也!!!
#include <clipbrd.hpp>

// 创建一个位图对象
Graphics::TBitmap *bmp = new Graphics::TBitmap;
bmp->Width = Chart1->Width;
bmp->Height = Chart1->Height;

// 创建一个控件画布对象
TControlCanvas *c = new TControlCanvas;
c->Control = Chart1;

// 将Chart上的图像复制到位图中
TRect rct(0, 0, Chart1->Width, Chart1->Height);
bmp->Canvas->CopyRect(rct, c, rct);

// 将位图中的图像复制到剪贴板
Clipboard()->Assign(bmp);

delete c;
delete bmp;

// 创建Excel对象
Variant vExcelApp;
try
{
    vExcelApp = Variant::CreateObject("Excel.Application");
}
catch(...)
{
    MessageBox(0, "启动 Excel 出错, 可能是没有安装Excel.",
        "", MB_OK | MB_ICONERROR);

    return;
}

// 使其可视
vExcelApp.OlePropertySet("Visible", true);

// 新建一个工作表
vExcelApp.OlePropertyGet("Workbooks").OleFunction("Add", 1); // 工作表

// 执行粘贴操作
vExcelApp.OlePropertyGet("ActiveSheet").OleProcedure("Paste");

// 后续代码忽略
// ...
弄好了 ,谢谢妖哥,OLE专业户牛!
ccrun.com 2013-09-05
  • 打赏
  • 举报
回复
OLE专业户来也!!!

#include <clipbrd.hpp>

// 创建一个位图对象
Graphics::TBitmap *bmp = new Graphics::TBitmap;
bmp->Width = Chart1->Width;
bmp->Height = Chart1->Height;

// 创建一个控件画布对象
TControlCanvas *c = new TControlCanvas;
c->Control = Chart1;

// 将Chart上的图像复制到位图中
TRect rct(0, 0, Chart1->Width, Chart1->Height);
bmp->Canvas->CopyRect(rct, c, rct);

// 将位图中的图像复制到剪贴板
Clipboard()->Assign(bmp);

delete c;
delete bmp;

// 创建Excel对象
Variant vExcelApp;
try
{
vExcelApp = Variant::CreateObject("Excel.Application");
}
catch(...)
{
MessageBox(0, "启动 Excel 出错, 可能是没有安装Excel.",
"", MB_OK | MB_ICONERROR);

return;
}

// 使其可视
vExcelApp.OlePropertySet("Visible", true);

// 新建一个工作表
vExcelApp.OlePropertyGet("Workbooks").OleFunction("Add", 1); // 工作表

// 执行粘贴操作
vExcelApp.OlePropertyGet("ActiveSheet").OleProcedure("Paste");

// 后续代码忽略
// ...
ccrun.com 2013-09-05
  • 打赏
  • 举报
回复
我给你写一段简单代码吧,等我一会。
derek52033 2013-09-05
  • 打赏
  • 举报
回复
引用 7 楼 ccrun 的回复:
将Chart上的内容截图,然后复制到剪贴板,在Excel中执行粘贴就可以了。
妖哥能 贴上代码吗?
ccrun.com 2013-09-05
  • 打赏
  • 举报
回复
将Chart上的内容截图,然后复制到剪贴板,在Excel中执行粘贴就可以了。

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧