QXlsx读写Excel表格

1.下载qtxlsxwriter 下载链接

2.将src文件夹下的xlsx放到你的项目中

3.项目文件.pro中添加 include(../xlsx/qtxlsx.pri)

4.qtxlsx.pri中添加DEFINES += XLSX_NO_LIB

创建读取xlsx示例:

void MainWindow::on_pushButtoncreate_clicked()
{QXlsx::Document xlsx;xlsx.write("A1","Hello Qt1!");xlsx.write("A2","Hello Qt2!");xlsx.write("A3","Hello Qt3!");xlsx.write("A4","Hello Qt4!");xlsx.write("A5","Hello Qt5!");xlsx.saveAs("Test.xlsx");
}void MainWindow::on_pushButton_read_clicked()
{QXlsx::Document xlsx("Test.xlsx");xlsx.selectSheet(xlsx.sheetNames()[0]);QXlsx::CellRange range = xlsx.dimension();for(int i=1; i <= range.rowCount(); ++i){if(xlsx.cellAt(i,1)) //若单元格没有内容返回空指针,忽略容易崩溃ui->plainTextEdit->appendPlainText(xlsx.cellAt(i,1)->value().toString());}
}

示例


MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);_tableView = new QTableView(this);_model = new QStandardItemModel(this);_tableView->setModel(_model);ui->widget_tableview->layout()->addWidget(_tableView);
}void MainWindow::on_pushButton_read_clicked()
{xlsxToTable(_tableView);//显示_tableView->show();
}void MainWindow::on_pushButtoncreate_clicked()
{tableToXlsx(_tableView);
}//表格转table
void MainWindow::xlsxToTable(QTableView* table)
{QStandardItemModel* model = static_cast<QStandardItemModel*>(table->model());//获取表格,选择表单,获取大小QXlsx::Document xlsx(QFileDialog::getOpenFileName(this,"select excel","","*.xlsx"));xlsx.selectSheet(xlsx.sheetNames().at(0));QXlsx::CellRange range = xlsx.dimension();//设置model大小model->setColumnCount(range.columnCount());model->setRowCount(range.rowCount()-1); //去掉表头一行//插入表头for(int i=0; i< model->columnCount(); ++i)if(xlsx.cellAt(1,i+1))model->setHeaderData(i,Qt::Horizontal,xlsx.cellAt(1,i+1)->value().toString());//插入内容for(int row=0; row< model->rowCount(); ++row)for(int col=0; col< model->columnCount(); ++col)if(xlsx.cellAt(row+2,col+1))model->setData(model->index(row,col),xlsx.cellAt(row+2,col+1)->value().toString());//合并单元格QList<QXlsx::CellRange> mergedCells =  xlsx.currentWorksheet()->mergedCells();for(auto cell : mergedCells){table->setSpan(cell.firstRow()-2,cell.firstColumn()-1,cell.rowCount(),cell.columnCount());}}//table转表格
void MainWindow::tableToXlsx(QTableView *table)
{QStandardItemModel* model = static_cast<QStandardItemModel*>(table->model());QXlsx::Document xlsx;//写入表头for(int i=0; i< model->columnCount(); ++i)xlsx.write(QString('A'+i)+"1",model->headerData(i,Qt::Horizontal));//写入内容for(int row=0; row< model->rowCount(); ++row)for(int col=0; col< model->columnCount(); ++col)xlsx.write(QString('A'+col)+QString::number(row+2),model->data(model->index(row,col)));//保存xlsx.saveAs(QFileDialog::getSaveFileName(this,"select excel","","*.xlsx"));}

添加读取不同表单


void MainWindow::on_comboBox_sheet_activated(int index)
{if(_model->rowCount()>0)_model->clear();changeSheet(_tableView,_xlsx,index);
}void MainWindow::xlsxToTable(QTableView* table)
{//获取表格,选择表单,获取大小if(_xlsx)delete _xlsx;_xlsx = new QXlsx::Document(QFileDialog::getOpenFileName(this,"select excel","","*.xlsx"));QStringList sheets = _xlsx->sheetNames();for(auto sheet:sheets)ui->comboBox_sheet->addItem(sheet);changeSheet(_tableView,_xlsx);
}void MainWindow::changeSheet(QTableView* table , QXlsx::Document* xlsx , int id)
{QStandardItemModel* model = static_cast<QStandardItemModel*>(table->model());xlsx->selectSheet(xlsx->sheetNames().at(id));QXlsx::CellRange range = xlsx->dimension();//设置model大小model->setColumnCount(range.columnCount());model->setRowCount(range.rowCount()-1); //去掉表头一行//插入表头for(int i=0; i< model->columnCount(); ++i)if(xlsx->cellAt(1,i+1))model->setHeaderData(i,Qt::Horizontal,xlsx->cellAt(1,i+1)->value().toString());//插入内容for(int row=0; row< model->rowCount(); ++row)for(int col=0; col< model->columnCount(); ++col)if(xlsx->cellAt(row+2,col+1))model->setData(model->index(row,col),xlsx->cellAt(row+2,col+1)->value().toString());//合并单元格QList<QXlsx::CellRange> mergedCells =  xlsx->currentWorksheet()->mergedCells();for(auto cell : mergedCells){table->setSpan(cell.firstRow()-2,cell.firstColumn()-1,cell.rowCount(),cell.columnCount());}
}

载入时解除合并单元格

//查找合并单元格QList<QXlsx::CellRange> mergedCells =  xlsx->currentWorksheet()->mergedCells();//插入内容,拆分合并单元格for(int row=0; row< model->rowCount(); ++row)for(int col=0; col< model->columnCount(); ++col)if(xlsx->cellAt(row+2,col+1)){bool contain =false;if(!mergedCells.isEmpty()){for(auto cell : mergedCells){if( (row+2 >= cell.firstRow() && row+2 <= cell.lastRow()) &&(col+1 >= cell.firstColumn() && col+1 <= cell.lastColumn())  ){model->setData(model->index(row,col),xlsx->cellAt(cell.firstRow(),cell.firstColumn())->value().toString());contain=true;break;}}}if(!contain)model->setData(model->index(row,col),xlsx->cellAt(row+2,col+1)->value().toString());}

QXlsx读写Excel表格相关推荐

  1. 使用python用什么软件-Python读写Excel表格,就是这么简单粗暴又好用

    Python读写Excel表格,就是这么简单粗暴又好用 2019-04-18 13:45:31 11点赞 107收藏 1评论 最近在做一些数据处理和计算的工作,因为数据是以.csv格式保存的,因此刚开 ...

  2. python简单代码编写-python读写Excel表格的实例代码(简单实用)

    安装两个库:pip install xlrd.pip install xlwt 1.python读excel――xlrd 2.python写excel――xlwt 1.读excel数据,包括日期等数据 ...

  3. python读取excel表格-python读写Excel表格的实例代码(简单实用)

    安装两个库:pip install xlrd.pip install xlwt 1.python读excel--xlrd 2.python写excel--xlwt 1.读excel数据,包括日期等数据 ...

  4. python处理表格很厉害么_Python读写Excel表格,就是这么简单粗暴又好用

    关注恋习Python(ID:sldata2017) 这是恋习Python之手把手系列第5篇原创首发文章 最近在做一些数据处理和计算的工作,因为数据是以.csv格式保存的,因此刚开始直接用Excel来处 ...

  5. python 写入第二列_python读写Excel表格的实例代码(简单实用)

    这篇文章主要介绍了python读写Excel表格的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下.需要先安装两个库:pip install xlrd.pip ...

  6. python对excel操作简书_Python读写Excel表格,就是这么简单粗暴又好用

    最近在做一些数据处理和计算的工作,因为数据是以.CSV格式保存的,因此刚开始直接用Excel来处理. 但是做着做着发现重复的劳动,其实并没有多大的意义,于是就想着写个小工具帮着处理. 以前正好在一本书 ...

  7. python怎么安装xlrd库_Python第三方库xlrd/xlwt的安装与读写Excel表格

    前言 相信大家都应该有所体会,在平时经常会遇到处理 Excel 表格数据的情况,人工处理起来实在是太麻烦了,我们可以使用 Python 来解决这个问题,我们需要两个 Python 扩展, xlrd 和 ...

  8. java使用jxl包读写excel表格文件,即xls格式文件

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用jxl包读写excel表格文件,即xls格式文件 本实例演示使用jxl包实现对excel文件的操作,下载 测试代码 public st ...

  9. 超实用的python技巧:python读写Excel表格的实例代码(简单实用)

    @本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 这篇文章主要介绍了python读写Excel表格的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可 ...

最新文章

  1. C++ 中的卷积神经网络 (CNN)
  2. (第十一周)考试系统测试报告
  3. LINQ标准查询操作符
  4. javaScript第七天(1)
  5. spring整合ehcache2.5.2缓存异常-- net.sf.ehcache.CacheException
  6. 你单身,其实是个科学问题……
  7. 下一代智能数据工厂,阿里云发布全新DataWorks
  8. matplotlib—patches.Circle
  9. 每天一个linux命令(57):ss命令
  10. 用vue-cli+iview做项目不兼容ie问题
  11. 孙鑫VC学习笔记:第十七讲 (一) 用剪贴板实现进程间的通信
  12. python pdb查看变量值_如何用pdb进行python调试
  13. WPS2012专业版序列号
  14. Android 11 系统修改默认字体
  15. 前端怎么加粗字体_价值上百万美元又备受争议的微软雅黑正常大小+小字体
  16. windows10磁盘100%解决方法
  17. mac 安装apk包 =》 adb (安装android 包)
  18. 阿里云的WEB应用防火墙(WAF)能抵挡什么攻击
  19. 【华人学者风采】周亚金 浙江大学
  20. w10系统excel服务器,win10系统下excel如何制作表格

热门文章

  1. Layui获取ID,点击加载表格
  2. 废品回收小程序如何结合人工智能
  3. 【黑金视频连载】FPGA NIOSII视频教程(13)--IIC实验实验
  4. 用自己的机器人实现cartographer建图测试与地图保存应该这样做
  5. 服务器数据盘与系统盘做raid,服务器做Raid盘阵列和Raid磁盘阵列区别和优势
  6. 车金融|GPS审核系统的前世今生
  7. 华为 HCIA 基础
  8. [转]好莱坞金牌编剧从《魔兽世界》学到的七件事!
  9. linux 编写写汇编程序,三.编写简单的汇编启动程序
  10. 对于很多奢侈品爱好者而言,选择一款心头好的意义