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

    楼主最近公司项目需要利用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)");


 

   

Qt中使用QXlsx库可以实现Excel的各种操作,包括合并单元格。可以通过【单元格引用】或【行列号】来设置单元格的合并,并且可以设置合并单元格的格式,例如文本居中对齐。另外,还可以取消单元格的合并,或者在不修改其他内容的情况下设置单元格的水平对齐和垂直对齐。使用QAxObject可以调用Excel中的各种函数或者事件,来操控读写Excel格。具体的操作步骤可以参考相关的官方文档和源码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [QT操作EXCEL](https://download.csdn.net/download/wayne649383848/10906550)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Qt读写Excel--QXlsx合并单元格、文本对齐7](https://blog.csdn.net/qq_43627907/article/details/125707691)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Qt使用QAxObject写入Excel格,包括填色、合并单元格、多行写入等](https://blog.csdn.net/qq_23604781/article/details/125254561)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值