CB2010操作Word代码

编译环境: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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值