c++ 操作word不依赖microsoft office

261 篇文章 10 订阅

经过查找资料,关于操作word不依赖微软环境,有两种方法,两种方法得到的字符串都需要gb2312与utf相互转换:

1、Duck

using namespace duckx;

duckx::Document doc("file.docx");

doc.open();

//获取当前word中所有的表格

for (auto p = doc.tables(); p.has_next(); p.next())

{

//获取所有行

for (auto r = p.rows(); r.has_next(); r.next())

{

//获取所有列的数据

for (auto r1 = r.cells(); r1.has_next(); r1.next())

{

for (auto r2 = r1.paragraphs(); r2.has_next(); r2.next())

{

for (auto r3 = r2.runs(); r3.has_next(); r3.next())

{

std::string strText = r3.get_text();

std::string str1 = UTF8ToGB2312(strText);

int yy = 55;

}

}

}

}

}

//读取当前word里面普通的内容

for (auto _doc = doc.paragraphs(); _doc.has_next(); _doc.next())

{

for (auto r = _doc.runs(); r.has_next(); r.next())

{

std::string strText = r.get_text();

std::string str1 = UTF8ToGB2312(strText);

}

}

 

2、DocxFactory 偏重于操作word模板,通过中间文件dfw来操作

//这个库使用步骤如下:

//(1)创建word模板文件,创建field字段,可多个,然后创建【书签】 每个书签可以包含多个field

//(2)根据setClipboardValue设置当前的field数值 然后paste 改变当前书签的数值

 

//设置当前的工作目录

string strTemp = "C:\\Users\\Administrator\\Desktop\\DocxFactory\\temp";

WordProcessingMerger::getInstance().setTempDir(strTemp);

WordProcessingCompiler::getInstance().setTempDir(strTemp);

 

//生成file.dfw的文件

WordProcessingCompiler::getInstance().compile("file.docx", WordProcessingCompiler::getInstance().getTempDir());

 

//加载文件

WordProcessingMerger::getInstance().load(WordProcessingCompiler::getInstance().getTempDir() + "\\file.dfw");

 

WordProcessingMerger::getInstance().setClipboardValue("item1", "fields1", GB2312ToUTF8("测试"));

WordProcessingMerger::getInstance().setClipboardValue("item1", "fields2", 33.55);

WordProcessingMerger::getInstance().paste("item1");

 

WordProcessingMerger::getInstance().save("file1.docx");

WordProcessingMerger::getInstance().close();

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值