QT 中TableWiget如何导出数据到EXcel

img

点击导出按钮,将搜索到的现在的这些数据导出到EXcel文件,这个导出的槽函数怎么写?


void MainWindow::exportToExcel()
{
    // 获取表格数据
    QList<QStringList> tableData;
    for (int row = 0; row < ui->tableWidget->rowCount(); row++) {
        QStringList rowData;
        for (int column = 0; column < ui->tableWidget->columnCount(); column++) {
            QTableWidgetItem *item = ui->tableWidget->item(row, column);
            if (item != NULL) {
                rowData.append(item->text());
            } else {
                rowData.append("");
            }
        }
        tableData.append(rowData);
    }

    // 创建Excel文件
    QXlsx::Document xlsx;
    for (int row = 0; row < tableData.size(); row++) {
        for (int column = 0; column < tableData[row].size(); column++) {
            xlsx.write(row + 1, column + 1, tableData[row][column]);
        }
    }
    xlsx.saveAs("data.xlsx");
}

可以借鉴下

void record::on_pushButton_data_save_clicked()//数据导出按钮槽函数
{
    //获取保存路径
        QString filepath=QFileDialog::getSaveFileName(this,tr("Save"),".",tr(" (*.xlsx)"));
        if(!filepath.isEmpty()){
            QAxObject *excel = new QAxObject(this);
            //连接Excel控件
            excel->setControl("Excel.Application");
            //不显示窗体
            excel->dynamicCall("SetVisible (bool Visible)","false");
            //不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示
            excel->setProperty("DisplayAlerts", false);
            //获取工作簿集合
            QAxObject *workbooks = excel->querySubObject("WorkBooks");
            //新建一个工作簿
            workbooks->dynamicCall("Add");
            //获取当前工作簿
            QAxObject *workbook = excel->querySubObject("ActiveWorkBook");
            //获取工作表集合
            QAxObject *worksheets = workbook->querySubObject("Sheets");
            //获取工作表集合的工作表1,即sheet1
            QAxObject *worksheet = worksheets->querySubObject("Item(int)",1);
 
            int rows = ui->tableWidget_data->rowCount();
            for(int i=1;i<23;i++){
                        //设置设置某行某列
                        QAxObject *Range = worksheet->querySubObject("Cells(int,int)", 1, i);
                        Range->dynamicCall("SetValue(const QString &)",QVariant(ui->tableWidget_data->horizontalHeaderItem(i-1)->text()));
                        for(int j=2;j<rows+2;j++)
                        {
                            QAxObject *Range = worksheet->querySubObject("Cells(int,int)", j, i);
                            qDebug()<<j-2<<"i="<<i-1;
                            if(ui->tableWidget_data->item(j-2,i-1)!=NULL) Range->dynamicCall("SetValue(const QString &)",QVariant(ui->tableWidget_data->item(j-2,i-1)->text()));
                                else Range->dynamicCall("SetValue(const QString &)",QVariant(""));
                            qDebug()<<j-2<<"i="<<i-1;
                        }
                    }
 
 
            workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(filepath));//保存至filepath,注意一定要用QDir::toNativeSeparators将路径中的"/"转换为"\",不然一定保存不了。
            workbook->dynamicCall("Close()");//关闭工作簿
            excel->dynamicCall("Quit()");//关闭excel
            delete excel;
            excel=NULL;
            qDebug() << "\n导出成功啦!!!";
        }
}

您可以使用Qt中的QTableWidget和QXlsx模块将数据导出到Excel中。首先,您需要通过以下方式将QTableWidget中的数据存储到QList中:

QList<QList<QVariant>> dataList;

for(int i=0; i< ui->tableWidget->rowCount(); i++)
{
    QList<QVariant> rowList;
    for(int j=0; j< ui->tableWidget->columnCount(); j++)
    {
        QTableWidgetItem* item = ui->tableWidget->item(i,j);
        if(item)
        {
            rowList << item->text();
        }
        else
        {
            rowList << "";
        }
    }
    dataList << rowList;
}

然后,您可以使用QXlsx模块将数据存储到Excel文件中。首先,您需要在您的pro文件中添加以下行来包含QXlsx模块:

QT += xlsx

然后,您可以使用以下代码将数据存储到Excel文件中:

QXlsx::Document xlsx;
xlsx.addSheet("Sheet1");

for(int i=0; i< dataList.count(); i++)
{
    QList<QVariant> rowList = dataList.at(i);
    for(int j=0; j< rowList.count(); j++)
    {
        xlsx.write(i+1, j+1, rowList.at(j));
    }
}

xlsx.saveAs("test.xlsx");

这将在程序当前目录中创建名为test.xlsx的Excel文件,并将QTableWidget中的数据存储到其中名为Sheet1的工作表中。

来自NewBing和LP的编写:

  • 如果你想将QTableWidget中的数据导出到Excel文件,你可以使用Qt提供的QXlsx库。请注意,QXlsx不是Qt库的一部分,你需要单独下载并安装它。你可以在这个链接找到它:https://github.com/QtExcel/QXlsx

下面是一个简单的例子说明如何实现导出功能。为了简化起见,我们假设你的表格有5列,并且我们将使用一个名为"exportToExcel()"的槽函数来实现导出功能。

要在你的项目中包含QXlsx库:

#include "xlsxdocument.h"

然后,你可以实现你的导出槽函数如下:

void MainWindow::exportToExcel()
{
    QXlsx::Document xlsx;

    for(int i = 0; i < ui->tableWidget->rowCount(); i++) {
        for(int j = 0; j < ui->tableWidget->columnCount(); j++) {
            QXlsx::Format format;
            if (j == ui->tableWidget->columnCount()-1) {
                format.setPatternBackgroundColor(QColor(220, 220, 220));
            }

            QTableWidgetItem* item = ui->tableWidget->item(i, j);
            if(item)
                xlsx.write(i+1, j+1, item->text(), format);
            else
                xlsx.write(i+1, j+1, "", format);
        }
    }

    xlsx.saveAs("output.xlsx");
}
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/715696
  • 这篇博客你也可以参考下:QT将tableview导出到Excel表格
  • 除此之外, 这篇博客: QT读取Excel表格内容到Table Widget中的 导读 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 目前总共有四种方法:

    一、ODBC 导入
    二、QAxObject 导入
    三、QXlsx 导入
    四、复制导入

    其中方法一至三适用于不加密的Excel文件,如果公司的Excel文件是加密过的,这三个方法是处理不了的,在我使用时是这样,如果有大佬懂的话请多指教。复制导入加密的Excel也能处理的,除非连复制黏贴都加密了,那真是离谱。

  • 以下回答由chatgpt基于相关博客总结生成:

    对于该问题,可以使用QXlsx和Qt自带的QTableWidget来实现导出功能。具体步骤如下:

    1. 安装QXlsx

    可以在QXlsx的官方GitHub仓库中下载源码并手动编译,也可以使用Qt的包管理器进行安装。这里推荐使用包管理器进行安装,方法如下:

    在.pro文件中添加以下内容:

    CONFIG += xlsx
    

    然后在Qt Creator中打开项目,单击项目导航栏中的“依赖项”按钮,在弹出的窗口中选择“Qt Xlsx”并安装。

    1. 实现导出槽函数

    在槽函数中,首先获取QTableWidget中的数据,然后将数据写入到Excel文件中。代码如下:

    void MainWindow::exportToExcel()
    {
        // 获取表格行数和列数
        int rowCount = ui->tableWidget->rowCount();
        int columnCount = ui->tableWidget->columnCount();
    
        // 创建QXlsx对象
        QXlsx::Document xlsx;
    
        // 从表格中读取数据,写入到Excel文件中
        for (int row = 0; row < rowCount; ++row) {
            for (int col = 0; col < columnCount; ++col) {
                QTableWidgetItem* item = ui->tableWidget->item(row, col);
                if (item) {
                    xlsx.write(row + 1, col + 1, item->text());
                } else {
                    xlsx.write(row + 1, col + 1, "");
                }
            }
        }
    
        // 保存Excel文件到本地
        QString fileName = QFileDialog::getSaveFileName(this, "导出Excel文件", "", "*.xlsx");
        if (!fileName.isEmpty()) {
            bool success = xlsx.saveAs(fileName);
            if (!success) {
                QMessageBox::warning(this, "错误", "保存Excel文件失败!");
            }
        }
    }
    

    其中,QFileDialog用于打开保存文件对话框,QMessageBox用于显示错误信息。需要在头文件中包含QFileDialog和QMessageBox:

    #include <QFileDialog>
    #include <QMessageBox>
    
    1. 连接信号和槽

    在MainWindow的构造函数中,将导出按钮的clicked信号连接到exportToExcel槽函数:

    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        // 连接导出按钮的clicked信号到exportToExcel槽函数
        connect(ui->exportButton, &QPushButton::clicked, this, &MainWindow::exportToExcel);
    }
    
    1. 编写界面

    在MainWindow.ui文件中添加一个QPushButton控件作为导出按钮,设置按钮文本为“导出”。将该按钮命名为“exportButton”。

    1. 运行程序,并测试导出功能

    启动程序,点击导出按钮,选择保存文件的路径和名称,然后点击保存按钮。程序将会把TableWidget中的数据导出到Excel文件中。

    总结

    通过Qt自带的QTableWidget和QXlsx库,我们可以很容易地实现将TableWidget中的数据导出到Excel文件中的功能。在实现过程中,需要注意处理一些特殊情况,比如QTableWidget中的某个单元格可能为空。

z

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
要实现TableWidget导出数据到Excel,需要使用QXlsx库。这个库是一个开源的C++库,它可以让你在Qt应用程序中直接读写Microsoft Excel文件。

首先,需要在Qt项目中引入QXlsx库。

然后,可以通过以下方法实现导出TableWidget数据到Excel:

void MainWindow::exportToExcel()
{
    // 获取TableWidget的列数和行数
    int rowCount = ui->tableWidget->rowCount();
    int columnCount = ui->tableWidget->columnCount();

    // 创建一个新的QXlsx文档对象
    QXlsx::Document xlsx;

    // 将TableWidget的数据复制到QXlsx文档
    for (int i = 0; i < rowCount; i++) {
        for (int j = 0; j < columnCount; j++) {
            QTableWidgetItem *item = ui->tableWidget->item(i, j);
            if (item) {
                xlsx.write(i + 1, j + 1, item->text());
            } else {
                xlsx.write(i + 1, j + 1, "");
            }
        }
    }

    // 弹出文件保存对话框,获取保存文件路径
    QString filePath = QFileDialog::getSaveFileName(this, tr("Save Excel File"), ".", tr("Excel Files (*.xlsx)"));

    // 如果用户选择了文件路径,保存QXlsx文档到Excel文件
    if (!filePath.isEmpty()) {
        xlsx.saveAs(filePath);
    }
}

当用户点击导出按钮时,会调用这个导出函数。这个函数首先获取TableWidget的行数和列数,然后创建一个新的QXlsx文档对象。接下来,它使用一个循环将TableWidget中的数据复制到QXlsx文档中。最后,它会弹出一个文件保存对话框,让用户选择保存文件的位置和文件名。如果用户选择了文件路径,它就会将QXlsx文档保存到Excel文件中。

希望这个回答能够帮助到你!
如果我的回答解决了您的问题,请采纳!

以下答案由GPT-4.5Plus大模型(语音)与博主A努力中.......共同编写:

根据问题链接中的描述,需要实现从QTableWidget导出数据到Excel的功能。

实现步骤:

  1. 安装xlwt模块,用于生成Excel文件:
bash
pip install xlwt

  1. 定义槽函数export_slot()进行导出:
python
def export_slot(self): 
    ...

  1. 槽函数中获取QTableWidget的行数row_count和列数col_count:
python
row_count = self.table.rowCount()  
col_count = self.table.columnCount()

  1. 创建Excel工作簿wb和工作表sheet:
python
wb = xlwt.Workbook()   
sheet = wb.add_sheet('sheet1')

  1. 遍历QTableWidget中的每行,将单元格数据写入Excel工作表:
python
for row in range(row_count):
    for col in range(col_count):
        item = self.table.item(row, col) 
        sheet.write(row, col, item.text())

  1. 设置Excel文件名并保存:
python  
save_file_name = './data.xls'
wb.save(save_file_name)  

  1. 完整代码:
python
import xlwt

class ExportDialog(QDialog):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        ... 
        
    def export_slot(self):
        row_count = self.table.rowCount()   
        col_count = self.table.columnCount() 
        wb = xlwt.Workbook()    
        sheet = wb.add_sheet('sheet1')
        
        for row in range(row_count):
            for col in range(col_count):
                item = self.table.item(row, col)   
                sheet.write(row, col, item.text())   
                
        save_file_name = './data.xls'
        wb.save(save_file_name)     


该代码实现了从QTableWidget导出数据到Excel文件的功能。