水晶报表导出Excel多出空白页不完全解决方案

在用水晶报表过程中,遇到凭空多出的白页,在CSDN上查找,也发现两个帖子在问这个

问题,但没有得到合适的答案。于是自己摸索着,也找到一条方法,但感觉不是最完美

的,希望有精通于此道的朋友赐教,多谢。
CSDN中类似问题贴:
http://community.csdn.net/Expert/topic/3305/3305114.xml?temp=.8683435
http://community.csdn.net/Expert/topic/3458/3458844.xml?temp=.7499506
http://community.csdn.net/Expert/topic/3178/3178158.xml?temp=.637356
http://community.csdn.net/Expert/topic/3248/3248381.xml?temp=.3554804
http://community.csdn.net/Expert/topic/3138/3138593.xml?temp=.1768915
http://community.csdn.net/Expert/topic/3203/3203522.xml?temp=.8826868
http://community.csdn.net/Expert/topic/3178/3178028.xml?temp=.8597223
http://community.csdn.net/Expert/topic/3467/3467509.xml?temp=.2149469
实际上这些问题贴子,感觉都没有得到一个完美的解答,我研究了一下发现问题的症结

在于,我们没有办法控制报表内容的宽度(内容宽度属性只读),在打印过程中也不会

多出空白页,只有在导出到Excel文档时,用分页预览,我们可以发现,对应的每一页

右边都多出了一个空白页来,必须手动把页面调整过来,否则打印就会多出一倍的空白

页。事实上我们不可能做这么繁琐的事情,调整了ExcelFormatOptions,调节导出后每

个列的固定宽度。具体如下:
   ExcelFormatOptions excelFormatOpts = new

ExcelFormatOptions();
   
   //' Set the excel format options.
   excelFormatOpts.ExcelTabHasColumnHeadings = false;
   excelFormatOpts.ExcelUseConstantColumnWidth = true;
   excelFormatOpts.ExcelConstantColumnWidth = 24.0;
   oRpt.ExportOptions.FormatOptions = excelFormatOpts;
   oRpt.ExportToDisk(ExportFormatType.Excel,

@"F:/LeadBridge/Tests/Report.xls");
   oRpt.Close();
这样导出的Excel发现Excel内容列紧挨在一起,但导出的内容却是在一页的,打印的时候也是按实际页输出。不知道CSDN以上贴主遇到的问题是不是一样的,希望对他们有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Qt中导出Excel通常使用QAxObject库,同时使用多线程可以提高程序的响应速度和效率。 以下是一个简单的示例代码,以导出一个包含50000个单元格的Excel表格为例: ```cpp #include <QApplication> #include <QAxObject> #include <QThread> class ExcelExporter : public QObject { Q_OBJECT public: ExcelExporter(QObject *parent = nullptr) : QObject(parent) {} public slots: void exportExcel() { QAxObject *excel = new QAxObject("Excel.Application", this); excel->setProperty("Visible", false); QAxObject *workbooks = excel->querySubObject("Workbooks"); QAxObject *workbook = workbooks->querySubObject("Add()"); QAxObject *worksheets = workbook->querySubObject("Worksheets"); QAxObject *worksheet = worksheets->querySubObject("Item(int)", 1); for (int i = 1; i <= 50000; i++) { QString cell = QString("A%1").arg(i); QAxObject *range = worksheet->querySubObject("Range(QString)", cell); range->setProperty("Value", i); delete range; } workbook->dynamicCall("SaveAs(const QString&)", "test.xlsx"); workbook->dynamicCall("Close()"); excel->dynamicCall("Quit()"); delete excel; } }; int main(int argc, char *argv[]) { QApplication a(argc, argv); ExcelExporter exporter; QThread thread; exporter.moveToThread(&thread); QObject::connect(&thread, &QThread::started, &exporter, &ExcelExporter::exportExcel); QObject::connect(&exporter, &ExcelExporter::finished, &thread, &QThread::quit); QObject::connect(&exporter, &ExcelExporter::finished, &exporter, &ExcelExporter::deleteLater); QObject::connect(&thread, &QThread::finished, &thread, &QThread::deleteLater); thread.start(); return a.exec(); } ``` 其中,`ExcelExporter`是一个QObject子类,用于导出Excel表格。`exportExcel()`是导出函数,该函数在另一个线程中运行。在`main()`函数中,我们将`ExcelExporter`移动到新线程中,并连接信号和槽以启动线程和在导出完成后关闭线程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kyle-soft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值