求助妖哥...BCB6通过OLE如何给单元格添加批注啊?.@妖哥

寒月神奇 2016-07-22 02:02:24
RT求助:BCB6通过OLE如何给单元格添加批注,貌似找了能找的资料和示例,里面都没有添加批注的说明.....刚开始玩OLE,小白跪求大神指点....谢谢!!!
...全文
182 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccrun.com 2016-07-26
  • 打赏
  • 举报
回复
结帖的时候,在最佳回复的编辑框里填上分数,然后点结帖按钮(CSDN的结帖页面美感太差 你可能得找半天才能找到)
寒月神奇 2016-07-24
  • 打赏
  • 举报
回复
谢谢妖哥,已经解决了,谢谢啦~~另外,怎么选择最佳回复啊......
寒月神奇 2016-07-23
  • 打赏
  • 举报
回复
感谢妖哥的回复,谢谢!在您给我的示范代码中,我看到您定义了一个ADDcomment的函数,然后在事件响应中先执行了下检查是否打开了excel,然后再执行了添加批注的三个步骤(实际就是AddComment函数,当中实际分别执行了添加批注、使能批注、插入实际的批注内容三步),但如果我已经打开了excel,并执行了其他操作均成功了的情况下,前面的操作我就可以忽略了,实际有效的就是那三步,我刚刚用最笨的办法,把各个参数代入到函数中去,但是测试的时候还是报错,批注影都没见着,我执行的代码如下: ST1.PG("Cell",1, 8).OleFunction("AddComment"); //ST1.PG("Cell",1, 8).用于定位到第一行第8列 ShowMessage("批注插入"); ST1.PG("Cell",1, 8).OlePropertyGet("Comment").OlePropertySet("Visible", false); ShowMessage("批注使能"); ST1.PG("Cell",1, 8).OlePropertyGet("Comment").OleFunction("Text", "我是第三行第2列的批注"); ShowMessage("批注完成"); 是否是哪里不对?我仔细看了下,应该就差您代码中的那个L没有,但那个L的具体作用我没看明白,求指点下,谢谢! 另外,再弱弱的稳一下,如何选择最佳回复呀?
ccrun.com 2016-07-23
  • 打赏
  • 举报
回复
OleFunction("Text", "我是第三行第2列的批注"); 改成
OleFunction("Text", WideString("我是第三行第2列的批注"));
另外,测试的时候哪一步出错,出错的具体信息尽量提供一下,方便别人帮助你找到错误原因并解决问题。
FASM_FASM 2016-07-22
  • 打赏
  • 举报
回复
引用 1 楼 ccrun 的回复:
OLE 专业户来也!!!
#include <comobj.hpp>

bool OpenExcel(Variant &excelApp, String xlsFile)
{
	try
	{
		excelApp = CreateOleObject("Excel.Application");
	}
	catch(...)
	{
		MessageBox(0, TEXT("启动 Excel 出错"), TEXT("OLE"), MB_OK | MB_ICONERROR);
		return false;
	}

#ifdef _DEBUG
	excelApp.OlePropertySet("Visible", true);
#else
	excelApp.OlePropertySet("Visible", false);
#endif

	// 如果XLS文件存在则打开,不存在则新建一个Workbook
	if (FileExists(xlsFile))
		excelApp.OlePropertyGet("Workbooks").OleFunction("Open", WideString(xlsFile));
	else
		excelApp.OlePropertyGet("Workbooks").OleFunction("Add", 1);

	return true;
}

bool SaveExcel(Variant excelApp, String xlsFile)
{
	bool result = excelApp.OlePropertyGet("ActiveWorkbook")
		.OleFunction("SaveAs", WideString(xlsFile));

	return result;
}

bool CloseExcel(Variant excelApp)
{
	bool result = excelApp.OleFunction("Quit");
	excelApp = Unassigned;

	return result;
}

void AddComment(Variant range, String comment)
{
	range.OleFunction("AddComment");
	// 63 63 72 75 6E 2E 63 6F 6D
	range.OlePropertyGet("Comment").OlePropertySet("Visible", false);
	range.OlePropertyGet("Comment").OleFunction("Text", WideString(comment));
}


void __fastcall TForm1::Button1Click(TObject *Sender)
{
	Variant excelApp;
	if (!OpenExcel(excelApp, L"")) return;

	Variant sheet = excelApp.OlePropertyGet("ActiveWorkbook").OlePropertyGet("Sheets", 1);

	Variant range = sheet.OlePropertyGet("Cells", 3, 2);

	AddComment(range, L"我是第三行第2列的批注");

	// ...
	// CloseExcel(excelApp);
}
威武,OLE专业户不是盖的!C++用粗了动态脚本的范儿!!!
ccrun.com 2016-07-22
  • 打赏
  • 举报
回复
OLE 专业户来也!!!
#include <comobj.hpp>

bool OpenExcel(Variant &excelApp, String xlsFile)
{
	try
	{
		excelApp = CreateOleObject("Excel.Application");
	}
	catch(...)
	{
		MessageBox(0, TEXT("启动 Excel 出错"), TEXT("OLE"), MB_OK | MB_ICONERROR);
		return false;
	}

#ifdef _DEBUG
	excelApp.OlePropertySet("Visible", true);
#else
	excelApp.OlePropertySet("Visible", false);
#endif

	// 如果XLS文件存在则打开,不存在则新建一个Workbook
	if (FileExists(xlsFile))
		excelApp.OlePropertyGet("Workbooks").OleFunction("Open", WideString(xlsFile));
	else
		excelApp.OlePropertyGet("Workbooks").OleFunction("Add", 1);

	return true;
}

bool SaveExcel(Variant excelApp, String xlsFile)
{
	bool result = excelApp.OlePropertyGet("ActiveWorkbook")
		.OleFunction("SaveAs", WideString(xlsFile));

	return result;
}

bool CloseExcel(Variant excelApp)
{
	bool result = excelApp.OleFunction("Quit");
	excelApp = Unassigned;

	return result;
}

void AddComment(Variant range, String comment)
{
	range.OleFunction("AddComment");
	// 63 63 72 75 6E 2E 63 6F 6D
	range.OlePropertyGet("Comment").OlePropertySet("Visible", false);
	range.OlePropertyGet("Comment").OleFunction("Text", WideString(comment));
}


void __fastcall TForm1::Button1Click(TObject *Sender)
{
	Variant excelApp;
	if (!OpenExcel(excelApp, L"")) return;

	Variant sheet = excelApp.OlePropertyGet("ActiveWorkbook").OlePropertyGet("Sheets", 1);

	Variant range = sheet.OlePropertyGet("Cells", 3, 2);

	AddComment(range, L"我是第三行第2列的批注");

	// ...
	// CloseExcel(excelApp);
}

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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