QT调用Excel时,设置自动调整列宽和所有单元格居中
2014-11-04 14:58
621 查看
楼主最近公司项目需要利用QT访问EXCEL库完成新建表、往表中填数据并直接打印出来的功能。
首先由于数据部分有的比较长,需要自动调整列宽才能直接打印,其次又因为不居中的话打印出来不太美观,所以楼主就开始研究自动调整列宽和单元格居中这两个问题。
经过网上搜索以及各种尝试,终于完成了,在这里稍作分享。
关于QT使用QAxObject调用EXCEL这部分楼主就不多说了,网上有很多类似的帖子,主要是记住最后要关闭了文档后再delete掉excel对象。
楼主先贴出来初始化调用excel创建一个表的代码,供大家参考。
往单元格里面填数据的代码就不贴了,更多的是按照需求去填数据,主要方法是通过调用Cells函数得到一个单元格然后使用setValue函数把数据填进去即可。
现在贴上后面处理自动调整列宽和设置居中的代码:
这里重新用range得到所有的使用的单元格,调用colunms得到所有列,然后调用AutoFit函数直接设置为自动调整列宽。
下面两句直接设置range的水平对齐和垂直对齐的参数。这里-4108就是居中的枚举常数。
后面是另存excel文档名为strFileName,然后关闭文档,最后退出调用excel。
delete excle以及发送其他处理信号的代码没有贴出来。
楼主花的时间大部分是在于设置range对齐参数的时候,一直觉得可以直接写成”xlCenter“,后来才意识到这个是个枚举常数,才去网上查excel里的枚举常数,找到xlCenter对应的值。
最后附上excel枚举常数查阅网址:http://technet.microsoft.com/zh-cn/library/ff197824
首先由于数据部分有的比较长,需要自动调整列宽才能直接打印,其次又因为不居中的话打印出来不太美观,所以楼主就开始研究自动调整列宽和单元格居中这两个问题。
经过网上搜索以及各种尝试,终于完成了,在这里稍作分享。
关于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)");
相关文章推荐
- POI中设置Excel单元格格式(背景色,居中,字体,边框,列宽,行高,自动换行等)
- 怎样设置excel中自动调整行高、列宽?
- 设置Excel2003单元格输入文字后自动调整合适行高和列宽
- C#中操作刚导出的Excel,设置其为自动调整列宽
- excel 根据单元格内容自动调整列宽
- 设置Excel2003单元格输入文字后自动调整合适行高和列宽
- POI中设置Excel单元格格式样式(居中,字体,边框,背景色、列宽、合并单元格等)
- EXCEL如何设置,使表格能自动调整列宽以适应文字长度
- POI中设置Excel单元格格式样式(居中,字体,边框,背景色、列宽、合并单元格等)
- POI中设置Excel单元格格式样式(居中,字体,边框等)
- java 操作excel,jxl加边框,jxl合并单元格,单元格的设置,单元格居中
- DevExpress GridView 导出到Excel 自动调整列宽
- Jxl导出Excel(跨行、设置列宽、设置行高、自动对齐、自定义背景等)
- [C#] winform中的DataGridView的列宽设置(自动调整列宽)
- Delphi调用Excel设置单元格的格式
- JTable设置列宽、自动调整
- vba设置Excel单元格左对齐、右对齐、居中对齐、字体、字号、字型
- phpexcel设置所有单元格的默认对齐方式
- excel自动调整行高和设置默认行高
- Javascript导出Excel,自动合并单元格、自动列宽、有进度条