编译环境:CB2010 ,win7 64位, Office 2007
遇到的问题就是插入图片时,让它插到第2格,它总是插到第1格,没办法只好改表格的形式了 。
还有就是表格里面填写内容时 ,必须是下面这样做 :
AnsiString content = Edit1->Text;
vCell = vTable.OleFunction("Cell", 2, 2); vCell.OlePropertySet("Range", content.c_str() );
而不能直接把Edit1的内容写进入 ,不然会出现Edit1内容不全的现象:
vCell = vTable.OleFunction("Cell", 2, 2); vCell.OlePropertySet("Range", Edit1->Text.c_str() );
还有就是合并表格的时候,最好自后向前,要不然你把前面的单元格合并了,很容易影响到后面的单元格编号。
下面是生成报表的全部代码:
try
{
//保存电子文档
Variant vWordApp, vTable, vCell;
Smallint TableCount = 0; //表格总数
try
{
vWordApp = Variant::CreateObject("Word.Application");
}
catch(...)
{
MessageBox(0, "启动 Word 出错, 可能是没有安装Word.","提示", MB_OK | MB_ICONERROR);
vWordApp = Unassigned;
return;
}
// 隐藏Word界面
vWordApp.OlePropertySet("Visible", false);
// 新建一个文档
vWordApp.OlePropertyGet("Documents").OleFunction("Add");
Variant vSelect = vWordApp.OlePropertyGet("Selection");
// 设置一下字体,大小 ,对齐
vSelect.OlePropertyGet("Font").OlePropertySet("Size", 22);
vSelect.OlePropertyGet("Font").OlePropertySet("Name", "黑体");
vSelect.OlePropertyGet("ParagraphFormat").OlePropertySet("Alignment", 1);
String str1 = "变压器绕组检测报告\r\n";
vSelect.OleProcedure("TypeText", WideString(str1));
// 设置一下字体,大小 ,对齐
vSelect.OlePropertyGet("Font").OlePropertySet("Size", 9);
vSelect.OlePropertyGet("Font").OlePropertySet("Name", "宋体");
vSelect.OlePropertyGet("ParagraphFormat").OlePropertySet("Alignment", 0); //靠左对齐
//======================================================================
//======================== 变压器信息 ==================================
//======================================================================
TableCount = TableCount +1;
// 将光标移到文档结尾
vWordApp.OlePropertyGet("Selection").OleProcedure("EndKey", 6); //wdStory
// 要插入表格的行数
int nRowCount(6);
nRowCount = nRowCount < 2? 2: nRowCount;
// 要插入表格的列数
int nColCount(4);
nColCount = nColCount < 1? 1: nColCount;
// 在Word文档中插入一个表格
vWordApp.OlePropertyGet("ActiveDocument").OlePropertyGet("Tables").OleProcedure("Add",vSelect.OlePropertyGet("Range"),
nRowCount, // 行数
nColCount, // 列数
1, // DefaultTableBehavior:=wdWord9TableBehavior
0); // AutoFitBehavior:=wdAutoFitFixed
// 操作这个表格
vTable = vWordApp.OlePropertyGet("ActiveDocument").OleFunction("Range").OlePropertyGet("Tables").OleFunction("Item", TableCount ); //第 1 个表格
//合并表格,第一行的1-4列
Variant start_cell = vTable.OleFunction("Cell", 1,1);
Variant end_cell = vTable.OleFunction("Cell", 1,4);
start_cell.OleProcedure("Merge", end_cell);
//使表格1中文字居中
vTable.OleFunction("Select");//Tables(1).Select
vSelect.OleFunction("SelectCell");//Selection.SelectCell
vSelect.OlePropertyGet("ParagraphFormat").OlePropertySet("Alignment", 1); //wdAlignParagraphCenter Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
vSelect.OlePropertyGet("Cells").OlePropertySet("VerticalAlignment", 1); // wdCellAlignVerticalCenter Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter
//填写表格内容
vCell = vTable.OleFunction("Cell", 1, 1);
vCell.OlePropertySet("Range", "变压器信息");
vCell.OlePropertyGet("Shading").OlePropertySet("BackgroundPatternColor", 14737632); // 列名单元格背景颜色 // wdColorGray125
AnsiString content;
vCell = vTable.OleFunction("Cell", 2, 1); vCell.OlePropertySet("Range", "变压器名称");
content = LabeledEdit4->Text;
vCell = vTable.OleFunction("Cell", 2, 2); vCell.OlePropertySet("Range", content.c_str() );
vCell = vTable.OleFunction("Cell", 3, 1); vCell.OlePropertySet("Range", "原边额定电压");
content = LabeledEdit6->Text;
vCell = vTable.OleFunction("Cell", 3, 2); vCell.OlePropertySet("Range", content.c_str());
vCell = vTable.OleFunction("Cell", 4, 1); vCell.OlePropertySet("Range", "副边额定电压");
content = LabeledEdit8->Text;
vCell = vTable.OleFunction("Cell", 4, 2); vCell.OlePropertySet("Range", content.c_str());
vCell = vTable.OleFunction("Cell", 5, 1); vCell.OlePropertySet("Range", "短路电抗");
content = LabeledEdit29->Text;
vCell = vTable.OleFunction("Cell", 5, 2); vCell.OlePropertySet("Range", content.c_str());
vCell = vTable.OleFunction("Cell", 6, 1); vCell.OlePropertySet("Range", "相数与联接组");
content = LabeledEdit10->Text;
vCell = vTable.OleFunction("Cell", 6, 2); vCell.OlePropertySet("Range", content.c_str());
vCell = vTable.OleFunction("Cell", 2, 3); vCell.OlePropertySet("Range", "变压器型号");
content = LabeledEdit5->Text;
vCell = vTable.OleFunction("Cell", 2, 4); vCell.OlePropertySet("Range", content.c_str());
vCell = vTable.OleFunction("Cell", 3, 3); vCell.OlePropertySet("Range", "原边额定电流");
content = LabeledEdit7->Text;
vCell = vTable.OleFunction("Cell", 3, 4); vCell.OlePropertySet("Range", content.c_str());
vCell = vTable.OleFunction("Cell", 4, 3); vCell.OlePropertySet("Range", "副边额定电流");
content = LabeledEdit9->Text;
vCell = vTable.OleFunction("Cell", 4, 4); vCell.OlePropertySet("Range", content.c_str());
vCell = vTable.OleFunction("Cell", 5, 3); vCell.OlePropertySet("Range", "空载损耗");
content = Edit7->Text;
vCell = vTable.OleFunction("Cell", 5, 4); vCell.OlePropertySet("Range", content.c_str());
vCell = vTable.OleFunction("Cell", 6, 3); vCell.OlePropertySet("Range", "短路损耗");
content = Edit8->Text;
vCell = vTable.OleFunction("Cell", 6, 4); vCell.OlePropertySet("Range", content.c_str());
//======================================================================
//======================== 变压器运行信息 ============================== isDanXiang
//======================================================================
if(CheckBox2->Checked)
{
TableCount = TableCount+1;
if(isDanXiang)
{
//=====单相====
// 将光标移到文档结尾
vWordApp.OlePropertyGet("Selection").OleProcedure("EndKey", 6); //wdStory
// 再插入一段文字
vSelect.OleProcedure("TypeText", "\n");
int nRowCount2(8);
nRowCount2 = nRowCount2 < 2? 2: nRowCount2;
// 要插入表格的列数
int nColCount2(6);
nColCount2 = nColCount2 < 1? 1: nColCount2;
// 在Word文档中插入一个表格
vWordApp.OlePropertyGet("ActiveDocument").OlePropertyGet("Tables").OleProcedure("Add",vSelect.OlePropertyGet("Range"),
nRowCount2, // 行数
nColCount2, // 列数
1, // DefaultTableBehavior:=wdWord9TableBehavior
0); // AutoFitBehavior:=wdAutoFitFixed
// 操作这个表格
vTable = vWordApp.OlePropertyGet("ActiveDocument").OleFunction("Range").OlePropertyGet("Tables").OleFunction("Item", TableCount); //选择第2个表格
//合并表格
start_cell = vTable.OleFunction("Cell", 8,5);
end_cell = vTable.OleFunction("Cell", 8,6);
start_cell.OleProcedure("Merge", end_cell);
//合并表格
start_cell = vTable.OleFunction("Cell", 8,2);
end_cell = vTable.OleFunction("Cell", 8,3);
start_cell.OleProcedure("Merge", end_cell);
//合并表格
start_cell = vTable.OleFunction("Cell", 7,5);
end_cell = vTable.OleFunction("Cell", 7,6);
start_cell.OleProcedure("Merge", end_cell);
//合并表格
start_cell = vTable.OleFunction("Cell", 7,2);
end_cell = vTable.OleFunction("Cell", 7,3);
start_cell.OleProcedure("Merge", end_cell);
//合并表格
start_cell = vTable.OleFunction("Cell", 6,5);
end_cell = vTable.OleFunction("Cell", 6,6);
start_cell.OleProcedure("Merge", end_cell);
//合并表格
start_cell = vTable.OleFunction("Cell", 6,2);
end_cell = vTable.OleFunction("Cell", 6,3);
start_cell.OleProcedure("Merge", end_cell);
//合并表格
start_cell = vTable.OleFunction("Cell", 5,5);
end_cell = vTable.OleFunction("Cell", 5,6);
start_cell.OleProcedure("Merge", end_cell);
//合并表格
start_cell = vTable.OleFunction("Cell", 5,2);
end_cell = vTable.OleFunction("Cell", 5,3);
start_cell.OleProcedure("Merge", end_cell);
start_cell = vTable.OleFunction("Cell", 1,1);
end_cell = vTable.OleFunction("Cell", 1,6);
start_cell.OleProcedure("Merge", end_cell);
//使表格2中文字居中
vTable.OleFunction("Select");//Tables(2).Select
vSelect.OleFunction("SelectCell");//Selection.SelectCell
vSelect.OlePropertyGet("ParagraphFormat").OlePropertySet("Alignment", 1); //wdAlignParagraphCenter Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
vSelect.OlePropertyGet("Cells").OlePropertySet("VerticalAlignment", 1); // wdCellAlignVerticalCenter Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter
//填写表格内容
vCell = vTable.OleFunction("Cell", 1, 1);
vCell.OlePropertySet("Range", "变压器运行信息");
vCell.OlePropertyGet("Shading").OlePropertySet("BackgroundPatternColor", 14737632); // 列名单元格背景颜色 // wdColorGray125
vCell = vTable.OleFunction("Cell", 2, 1); vCell.OlePropertySet("Range", "原边");
vCell = vTable.OleFunction("Cell", 2, 2); vCell.OlePropertySet("Range", "有效值");
vCell = vTable.OleFunction("Cell", 2, 3); vCell.OlePropertySet("Range", "相位");
vCell = vTable.OleFunction("Cell", 2, 4); vCell.OlePropertySet("Range", "副边");
vCell = vTable.OleFunction("Cell", 2, 5); vCell.OlePropertySet("Range", "有效值");
vCell = vTable.OleFunction("Cell", 2, 6); vCell.OlePropertySet("Range", "相位");
vCell = vTable.OleFunction("Cell", 3, 1); vCell.OlePropertySet("Range", "电压");
content = RzEdit41->Text;
vCell = vTable.OleFunction("Cell", 3, 2); vCell.OlePropertySet("Range", content.c_str());
content = RzEdit51->Text;
vCell = vTable.OleFunction("Cell", 3, 3); vCell.OlePropertySet("Range", content.c_str());
vCell = vTable.OleFunction("Cell", 3, 4); vCell.OlePropertySet("Range", "电压");
content = RzEdit42->Text;
vCell = vTable.OleFunction("Cell", 3, 5); vCell.OlePropertySet("Range", content.c_str());
content = RzEdit55->Text;
vCell = vTable.OleFunction("Cell", 3, 6); vCell.OlePropertySet("Range", content.c_str());
vCell = vTable.OleFunction("Cell", 4, 1); vCell.OlePropertySet("Range", "电流");
content = RzEdit44->Text;
vCell = vTable.OleFunction("Cell", 4, 2); vCell.OlePropertySet("Range", content.c_str());
content = RzEdit54->Text;
vCell = vTable.OleFunction("Cell", 4, 3); vCell.OlePropertySet("Range", content.c_str());
vCell = vTable.OleFunction("Cell", 4, 4); vCell.OlePropertySet("Range", "电流");
content = RzEdit43->Text;
vCell = vTable.OleFunction("Cell", 4, 5); vCell.OlePropertySet("Range", content.c_str());
content = RzEdit56->Text;
vCell = vTable.OleFunction("Cell", 4, 6); vCell.OlePropertySet("Range", content.c_str());
vCell = vTable.OleFunction("Cell", 5, 1); vCell.OlePropertySet("Range", "视在功率");
content = RzEdit47->Text;
vCell = vTable.OleFunction("Cell", 5, 2); vCell.OlePropertySet("Range", content.c_str());
vCell = vTable.OleFunction("Cell", 5, 3); vCell.OlePropertySet("Range", "视在功率");
content = RzEdit45->Text;
vCell = vTable.OleFunction("Cell", 5, 4); vCell.OlePropertySet("Range", content.c_str());
vCell = vTable.OleFunction("Cell", 6, 1); vCell.OlePropertySet("Range", "有功功率");
content = RzEdit48->Text;
vCell = vTable.OleFunction("Cell", 6, 2); vCell.OlePropertySet("Range", content.c_str());
vCell = vTable.O