


详细代码:
PRO文件
include(../QtXlsxWriter/src/xlsx/qtxlsx.pri)
H文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTextCodec>
#include <QDebug>
#include "xlsxdocument.h"
#include <QFileDialog>
#include <QDir>
#include <QMessageBox>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_tableWidget_cellChanged(int row, int column);
void on_DeleteEmptyRow_clicked();
void on_rest_clicked();
void on_Test_clicked();
void on_OutXlsx_clicked();
private:
void Init();
void InitWidget();
QString getItemInfo(const int& row,const int& column);
private:
Ui::Widget *ui;
QTextCodec *m_codec;
char m_xlsxColum[6];
};
#endif
CPP文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
Init();
InitWidget();
}
Widget::~Widget()
{
delete ui;
}
void Widget::Init()
{
m_codec = QTextCodec::codecForName("GBK");
m_xlsxColum[0] = 'A';
m_xlsxColum[1] = 'B';
m_xlsxColum[2] = 'C';
m_xlsxColum[3] = 'D';
m_xlsxColum[4] = 'E';
m_xlsxColum[5] = 'F';
}
void Widget::InitWidget()
{
ui->setupUi(this);
this->setWindowTitle(m_codec->toUnicode("西瓜撞地球 QQ:470861502"));
ui->tableWidget->setColumnCount(6);
ui->tableWidget->setHorizontalHeaderLabels(QStringList() <<
m_codec->toUnicode("姓名") << m_codec->toUnicode("证件类型")
<< m_codec->toUnicode("证件号码") << m_codec->toUnicode("账卡号")
<< m_codec->toUnicode("金额") << m_codec->toUnicode("联系电话"));
ui->tableWidget->insertRow(0);
ui->tableWidget->resizeColumnsToContents();
ui->tableWidget->resizeRowsToContents();
ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
ui->tableWidget->setStyleSheet("selection-background-color:lightblue;");
ui->tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{background:skyblue;}");
}
QString Widget::getItemInfo(const int &row, const int &column)
{
return ui->tableWidget->item(row,column) == nullptr ? "" : ui->tableWidget->item(row,column)->text().simplified();
}
void Widget::on_tableWidget_cellChanged(int row, int column)
{
Q_UNUSED(column)
if(row + 1 == ui->tableWidget->rowCount())
{
ui->tableWidget->insertRow(ui->tableWidget->rowCount());
}
ui->tableWidget->resizeColumnsToContents();
ui->tableWidget->resizeRowsToContents();
}
void Widget::on_DeleteEmptyRow_clicked()
{
for(int row = ui->tableWidget->rowCount()-1 ; row >= 0 ; --row)
{
if(getItemInfo(row,0).isEmpty() &&
getItemInfo(row,1).isEmpty() &&
getItemInfo(row,2).isEmpty() &&
getItemInfo(row,3).isEmpty() &&
getItemInfo(row,4).isEmpty() &&
getItemInfo(row,5).isEmpty() )
{
ui->tableWidget->removeRow(row);
}
}
if(ui->tableWidget->rowCount() == 0)
ui->tableWidget->insertRow(0);
}
void Widget::on_rest_clicked()
{
ui->tableWidget->clearContents();
ui->tableWidget->setRowCount(1);
}
void Widget::on_Test_clicked()
{
ui->tableWidget->clearContents();
ui->tableWidget->setRowCount(10);
for(int row = 0 ; row < 10 ; row ++)
{
for(int colum = 0 ; colum < 6 ; colum++)
{
ui->tableWidget->setItem(row,colum,new QTableWidgetItem(QString("Row:[%1],Col[%2]").arg(row).arg(colum)));
}
}
ui->tableWidget->removeRow(ui->tableWidget->rowCount() -1);
}
void Widget::on_OutXlsx_clicked()
{
QString fileName = QFileDialog::getSaveFileName(this, m_codec->toUnicode("保存文件"),
QDir::currentPath(),
tr("Files(*.xlsx)"));
if(fileName.isEmpty())
{
QMessageBox::critical(this,m_codec->toUnicode("错误"),m_codec->toUnicode("文件名不正确!"));
return ;
}
on_DeleteEmptyRow_clicked();
QXlsx::Document xlsx(fileName);
for(int row = 0 ; row < ui->tableWidget->rowCount() ; row++)
{
for(int colum = 0 ; colum < 6 ; colum++)
{
xlsx.write(QString("%1%2").arg(m_xlsxColum[colum]).arg(row), this->getItemInfo(row,colum));
}
}
if(xlsx.save())
{
QMessageBox::information(this,m_codec->toUnicode("提示"),m_codec->toUnicode("文件保存成功!"));
}else
{
QMessageBox::critical(this,m_codec->toUnicode("错误"),m_codec->toUnicode("文件保存失败!"));
}
}