QT 使用QTXlsx类库做的 代发工资生成 表格文件的小工具

主界面一键生成测试数据根据测试文件生成的表格文件

详细代码:

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 // WIDGET_H

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("文件保存失败!"));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值