Qt实现Excel表格的读写操作(office,WPS)

我们用QT经常会将表格的数据导入数据库或者将数据库中的数据导出为*.xls/*.xlsx。使用比较多的就是用QAxObject对象进行操作。一般首先会连接数据库:


 
 
  1. QAxObject *excel = new QAxObject( this); //连接Excel控件
  2. excel->setControl( "Excel.Application");

但是很多人的电脑上并没有安装office,这样会导致运行失败,如果安装了WPS,我们可以


 
 
  1. QAxObject *excel = new QAxObject( this); //连接Excel控件
  2. excel->setControl( "ket.Application");

这说明office和WPS是兼容的,我们只需要修改这一行代码就可以了。

另外,附上详细的代码说明:


 
 
  1. void Window::importExcelToDatabase()
  2. {
  3. QString strFilePathName = QFileDialog::getOpenFileName( this,QStringLiteral( "选择Excel文件"), "",tr( "Exel file(*.xls *.xlsx)"));
  4. if(strFilePathName.isNull())
  5. {
  6. return ;
  7. }
  8. QAxObject *excel = new QAxObject( this); //连接Excel控件
  9. if (excel->setControl( "Excel.Application"))
  10. {
  11. }
  12. else
  13. {
  14. excel->setControl( "ket.Application"); //连接Excel控件
  15. }
  16. excel->setProperty( "Visible", false); //不显示窗体
  17. QAxObject* workbooks = excel->querySubObject( "WorkBooks"); //获取工作簿集合
  18. workbooks->dynamicCall( "Open(const QString&)", strFilePathName); //打开打开已存在的工作簿
  19. QAxObject* workbook = excel->querySubObject( "ActiveWorkBook"); //获取当前工作簿
  20. QAxObject* sheets = workbook->querySubObject( "Sheets"); //获取工作表集合,Sheets也可换用WorkSheets
  21. QAxObject* sheet = workbook->querySubObject( "WorkSheets(int)", 1); //获取工作表集合的工作表1,即sheet1
  22. QAxObject* range = sheet->querySubObject( "UsedRange"); //获取该sheet的使用范围对象
  23. QVariant var = range->dynamicCall( "Value");
  24. delete range;
  25. QVariantList varRows = var.toList(); //得到表格中的所有数据
  26. if(varRows.isEmpty())
  27. {
  28. return;
  29. }
  30. const int rowCount = varRows.size();
  31. QStringList m_userid,m_card_id,m_action;
  32. for( int i = 1; i < rowCount; ++i) //
  33. {
  34. QVariantList rowData = varRows[i].toList();
  35. m_userid<<rowData[ 0].toString();
  36. m_card_id<<rowData[ 1].toString();
  37. m_action<<rowData[ 2].toString();
  38. }
  39. }

(注意:对Excel文档的读写操作,如果数据量很大,最好使用多线程,否则会导致主界面的假死。)

可以使用run()函数或者moveToThread()函数,具体的使用请参考其它网站。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值