您的位置:首页 > 编程语言 > Qt开发

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

2014-11-04 14:58 621 查看
楼主最近公司项目需要利用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)");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: