QT调用Excel时,设置自动调整列宽和所有单元格居中

来源:互联网 发布:杭州智尚网络 编辑:程序博客网 时间:2024/06/05 03:21

    楼主最近公司项目需要利用QT访问EXCEL库完成新建表、往表中填数据并直接打印出来的功能。

    首先由于数据部分有的比较长,需要自动调整列宽才能直接打印,其次又因为不居中的话打印出来不太美观,所以楼主就开始研究自动调整列宽和单元格居中这两个问题。

经过网上搜索以及各种尝试,终于完成了,在这里稍作分享。

    关于QT使用QAxObject调用EXCEL这部分楼主就不多说了,网上有很多类似的帖子,主要是记住最后要关闭了文档后再delete掉excel对象。

    楼主先贴出来初始化调用excel创建一个表的代码,供大家参考。

 

//创建新的表格,清理了range 为写入做好了准备 下面开始写入文本
QAxObject *excel = new QAxObject("Excel.Application");if (excel==NULL){return false;}excel->setProperty("Visible", false);QAxObject * workbooks = excel->querySubObject("WorkBooks");if (workbooks==NULL){return false;}workbooks->dynamicCall("Add");QAxObject * workbook = excel->querySubObject("ActiveWorkBook");if (workbook==NULL){return false;}QAxObject * workSheet = workbook->querySubObject("Worksheets(int)",1);if (workSheet==NULL){return false;}QAxObject * range = workSheet->querySubObject("UsedRange");if (range==NULL){return false;}range->dynamicCall("Clear");

    往单元格里面填数据的代码就不贴了,更多的是按照需求去填数据,主要方法是通过调用Cells函数得到一个单元格然后使用setValue函数把数据填进去即可。

    现在贴上后面处理自动调整列宽和设置居中的代码:

range = workSheet->querySubObject("UsedRange");QAxObject * cells = range->querySubObject("Columns");cells->dynamicCall("AutoFit");range->setProperty("HorizontalAlignment",-4108);range->setProperty("VerticalAlignment",-4108);workbook->dynamicCall("SaveAs(QString)", strFileName);workbook->dynamicCall("Close(Boolean)", false);excel->dynamicCall("Quit(void)");

    这里重新用range得到所有的使用的单元格,调用colunms得到所有列,然后调用AutoFit函数直接设置为自动调整列宽。

    下面两句直接设置range的水平对齐和垂直对齐的参数。这里-4108就是居中的枚举常数。

    后面是另存excel文档名为strFileName,然后关闭文档,最后退出调用excel。

    delete excle以及发送其他处理信号的代码没有贴出来。

    楼主花的时间大部分是在于设置range对齐参数的时候,一直觉得可以直接写成”xlCenter“,后来才意识到这个是个枚举常数,才去网上查excel里的枚举常数,找到xlCenter对应的值。

   最后附上excel枚举常数查阅网址:http://technet.microsoft.com/zh-cn/library/ff197824


range = workSheet->querySubObject("UsedRange");QAxObject * cells = range->querySubObject("Columns");cells->dynamicCall("AutoFit");range->setProperty("HorizontalAlignment",-4108);range->setProperty("VerticalAlignment",-4108);workbook->dynamicCall("SaveAs(QString)", strFileName);workbook->dynamicCall("Close(Boolean)", false);excel->dynamicCall("Quit(void)");


 

   

1 0
原创粉丝点击