概述
查看Excel文件分两种:office和WPS,如果电脑里只装了WPS,那这里会有个小坑,稍后会讲。
主要用QAxObject对象来实现。
QAxObject excel("Excel.Application");
excel.dynamicCall("SetVisible(bool)",false); //如果为了看自己的程序到底怎样工作,可以设置为true
QAxObject* work_books=excel.querySubObject("WorkBooks");
QAxObject* work_book = nullptr;
QAxObject* work_sheets = nullptr;
QAxObject* work_sheet = nullptr;
if(work_books)
{
QFile file(fileName);
fileName = fileName.replace("/","\");
if(file.exists())
{
work_book = work_books->querySubObject("Open(const QString&)",fileName);
}
else
{
work_book = work_books->querySubObject("Add()");
}
if(work_book)
{
work_sheets = work_book->querySubObject("Sheets");
}
else
{
return;
}
}
else
{
return ;
}
work_sheet = work_sheets->querySubObject("Item(int index)",1);
现在,一个sheet页就创建好了。
Excel中每个格都可以单独操作,比如:
sTitle=QObject::tr(u8"标题");
QAxObject* cell=work_sheet->querySubObject("Cells(int,int)",2,1);
//cell->setProperty("Value",sTitle);
cell->dynamicCall("SetValue(const QVariant&)",sTitle);
cell就是一个小格,这里我们对cell赋值,(2,1)这个格子就会填“标题”
注意!!这里对cell赋值用的方法是dynamicCall()而不是setProperty()。这很重要,因为WPS不支持setProperty()。office对这两个方法都支持,啧啧,还是office好。
另外,有没有想过如果要导出上万个格怎么办?
每次都调用work_sheet->querySubObject(“Cells(int,int)”,x,y)?
有兴趣的朋友可以搜一下range,一次赋值一个区域。我导出过一个文件,原来用时6分钟,用了range,大概15秒。
最后
以上就是开朗水杯为你收集整理的使用Qt导出Excel文件。的全部内容,希望文章能够帮你解决使用Qt导出Excel文件。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复