使用QAxObject将原来的Excel数据转换为PDF

24 篇文章 0 订阅

VS2015+QT5.3+Excel2006

项目中原来有使用QT的QAxObject使用OfficeExcel的组件导出Excel报告文件的功能,由于项目要求导出PDF功能比较急,如果使用其他样式需要重新组织格式等,花费较多时间,因此考虑将原来的Excel报告直接导出PDF,

1搜索QT导出PDF的资料,遇到几个WORD导出PDF,遇到ExportAsFixedFormat这个函数,按照网页上的参数试了一下不行,坑,可能是word导出到pdf跟Excel不一样, 

2 经过仔细搜索,找到ExportAsFixedFormat(Excel)函数的参数说明,根据参数实现
 


axCurWorkBook->querySubObject("ExportAsFixedFormat(QVariant, QVariant)",
            0, pdfpath);

其中axCurWorkBook是最终导出成Excel的QAxObject对象,pdfpath是保存的PDF文件的路径

0是函数的指定的PDF格式.

函数具体参见:https://docs.microsoft.com/zh-cn/office/vba/api/excel.workbook.exportasfixedformat

PS:日期:2020-4-27

3 由于之前导出的PDF格式按照默认纸张导出 很多列都分开了,因此测试Excel的功能,发现可以设置内容为一页,然后再导出到Excel就可以了,方法是:

        //另存为pdf
        QAxObject* pagecfg = axResultSheet->querySubObject("PageSetup");
        //设置工作表 区域为1页
		pagecfg->setProperty("Zoom", false);
		pagecfg->setProperty("FitToPagesWide", 1);
		pagecfg->setProperty("FitToPagesTall", 1);
		delete pagecfg;
		
		axResultSheet->dynamicCall("ExportAsFixedFormat(QVariant, QVariant)",
			0, pdfpath);

我是通过录制宏分析,然后在官网网址查看说明得到的.https://docs.microsoft.com/zh-cn/office/vba/api/excel.pagesetup.fittopageswide

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
可以使用以下代码将Excel表格转换为QVariantList类型: ``` QAxObject *excel = new QAxObject("Excel.Application", this); QAxObject *workbooks = excel->querySubObject("Workbooks"); QAxObject *workbook = workbooks->querySubObject("Open(const QString&)", "path/to/your/excel/file.xlsx"); QAxObject *worksheets = workbook->querySubObject("Worksheets"); QAxObject *worksheet = worksheets->querySubObject("Item(int)", 1); // 1 is the index of the worksheet you want to read QAxObject *used_range = worksheet->querySubObject("UsedRange"); QVariantList rows; int row_count = used_range->property("Rows").toInt(); int column_count = used_range->property("Columns").toInt(); for (int row = 1; row <= row_count; row++) { QVariantList row_data; for (int column = 1; column <= column_count; column++) { QAxObject *cell = used_range->querySubObject("Item(int,int)", row, column); QVariant cell_value = cell->property("Value"); row_data.append(cell_value); cell->clear(); delete cell; } rows.append(row_data); } used_range->clear(); worksheet->clear(); worksheets->clear(); workbook->clear(); workbooks->dynamicCall("Close()"); excel->dynamicCall("Quit()"); delete used_range; delete worksheet; delete worksheets; delete workbook; delete workbooks; delete excel; // rows now contains the data from the Excel worksheet as a QVariantList of QVariantLists ``` 这段代码使用QAxObject读取Excel文件,将每一行的数据存储在QVariantList中,最后将所有行的QVariantList存储在一个大的QVariantList中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值