需求:有朋友找我说要改代码,而且量很大,但是只有一部分数字要改动。
提取需求:固定文本,规律递增,保持格式
像这样,只有这 3 个 0 是一次递增的,需要写 80 多遍。于是便问我有没有什么好方法。
开玩笑,我堂堂一个码农。
刚好最近在学 QT,那就随便用一下吧。
1、添加 QT += axcontainer
2、整几个控件
3、代码
//点击写入按钮触发
void MainWindow::on_pushButton_word_write_clicked()
{
QAxObject *myword;//Word应用程序指针
QAxObject *mydocs;//文档集指针
QAxObject *document;//文档指针
QAxObject *paragraph;//文本段指针
//创建 Word 进程
myword = new QAxObject("Word.Application");
myword->dynamicCall("SetVisible(bool Visible)", "false");//隐藏不显示文档窗体
myword->setProperty("DisplayAlerts", false); //屏蔽文档的警告消息
//获取文档集
mydocs = myword->querySubObject("Documents");
mydocs->dynamicCall("Add(void)");//添加一个文档
document= myword->querySubObject("ActiveDocument");//指向当前活动文档
paragraph = myword->querySubObject ("Selection");//指向当前选中文本
//拿到开始的数值
int startnumber = ui->lineEdit_word_startnumber->text().toInt();
//拿到写多长
int writenumber = ui->lineEdit_word_writelen->text().toInt();
//拼凑字符串
QString writewoldstr="";
QString writewoldstrt1="\n<DOI desc=\"";
QString writewoldstrt2="号密度表温度\" name=\"Temp";
QString writewoldstrt3="\">\n\t<DAI name=\"dU\">\n\t\t<Val>";
QString writewoldstrt4="号密度表温度</Val>\n\t</DAI>\n</DOI>";
for(int c=0;c<writenumber;c++){
QString n = QString::number(startnumber+c);
writewoldstr.append(writewoldstrt1);
writewoldstr.append(n);
writewoldstr.append(writewoldstrt2);
writewoldstr.append(n);
writewoldstr.append(writewoldstrt3);
writewoldstr.append(n);
writewoldstr.append(writewoldstrt4);
}
//写入从界面文本框获取的文本
paragraph->dynamicCall("TypeText(const QString&)", writewoldstr);
//保存文档
document->dynamicCall("SaveAs(const QString&)","D:\\Qt5.doc");
//关闭
delete paragraph;
paragraph= nullptr;
document->dynamicCall("Close()");
myword->dynamicCall("Quit()");
QMessageBox::information(this, tr("完毕") , tr("Word 文档己保存")) ;
}
4、效果
代码中保存文档路径中找到文档
好啦,完事