QXlsx
作为QT的表格控件,还是很好用的。但是这个Qxlsx博客上关于它的内容很少,而且质量也参差不齐。。。楼主在踩完各种坑后自己也总结一下。
QTableWidget有许多好用的方法可以直接使用:(记得前面加上ui->控件名,这里只列出了方法)
setStyleSheet(“QTableWidget::item{border:1px solid ;}”);//线条加粗
setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);//居中
horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//水平方向自适应
verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);//垂直方向自适应
item->setFlags(item->flags() & (~Qt::ItemIsEditable));//不可修改
item->setBackground(QBrush(QColor(Qt::lightGray)));//加阴影
建表格也很简单可以直接设置表格行列数setrowcount和setcolumncount
注意:item是一个指针,记录了坐标值的地址,如果不setItem的话指向的该坐标的item为空,很多异常中断都是这个引起的,很多其他控件也是。
很多东西网上都有,但是遇到网上内容质量不高的时候记得去查官方文档。
这里我留一下QXlsx的官方文档,涉及的操作上面都有讲
http://qtxlsx.debao.me/
QXlsx模块的下载/编译:https://github.com/dbzhang800/QtXlsxWriter.git上面也有详细说明。
我在使用的时候用到了写和合并单元格的方法:
在.pro内加入QT += xlsx
使用方法:write(A1,text):在第A列第一行插入text
mergeCells(“A1:K1”,format);:合并第一行A~K列
这里是笔者学习制作的一个xlsx比较简单,深入了解可以去看官方文档
我自己的例子:
QXlsx::Document xlsx;
QXlsx::Format format;//excel格式
format.setHorizontalAlignment(QXlsx::Format::AlignHCenter);//水平居中
format.setVerticalAlignment(QXlsx::Format::AlignVCenter);//垂直居中
int row = ui->tableWidget_2->rowCount();
int column = ui->tableWidget_2->columnCount();
for (int i = 0;i < row;i++) {
for (int j = 0;j < column;j++) {
if (ui->tableWidget_2->item(i,j)) {//当item内有值的时候加入到execl内
xlsx.write('A' + j + QString::number(i+1),ui->tableWidget_2->item(i,j)->text(),format);
}
}
}
xlsx.mergeCells("A1:K1",format);//合并第一行第A~K列
xlsx.mergeCells("A2:A3",format);
xlsx.mergeCells("B2:B3",format);
xlsx.mergeCells("C2:C3",format);
xlsx.mergeCells("D2:D3",format);
xlsx.mergeCells("E2:E3",format);
xlsx.mergeCells("F2:H2",format);
xlsx.mergeCells("I2:K2",format);
for (int i = 3;i < row;i+=3) {
xlsx.mergeCells("A" + QString::number(i+1) + ":" + "A" + QString::number(i+3),format);
xlsx.mergeCells("B" + QString::number(i+1) + ":" + "B" + QString::number(i+3),format);
xlsx.mergeCells("C" + QString::number(i+1) + ":" + "C" + QString::number(i+3),format);
xlsx.mergeCells("D" + QString::number(i+1) + ":" + "D" + QString::number(i+3),format);
xlsx.mergeCells("F" + QString::number(i+1) + ":" + "F" + QString::number(i+3),format);
xlsx.mergeCells("I" + QString::number(i+1) + ":" + "I" + QString::number(i+3),format);
}
xlsx.saveAs("text.xlsx");
这个图是之前版本的代码的截图实际上所有单元格都是居中的
官方文档上有详细介绍:这里给出截图