Qt 解析EXcel文件

举报
DreamLife 发表于 2022/04/15 23:59:23 2022/04/15
【摘要】 写代码需要将excel中的文件导入到数据库中     网上找到以为大神写的,但是当初没有保存,也没有找到   我几乎是原分不动拔下来的,希望大神莫怪       void AddDialog::readExcel(QString url){ QAxObj...

写代码需要将excel中的文件导入到数据库中

 

 

网上找到以为大神写的,但是当初没有保存,也没有找到

 

我几乎是原分不动拔下来的,希望大神莫怪

 

 

 


  
  1. void AddDialog::readExcel(QString url)
  2. {
  3. QAxObject excel("Excel.Application");
  4. excel.setProperty("Visible",true);
  5. QAxObject *work_books = excel.querySubObject("WorkBooks");
  6. work_books->dynamicCall("Open (const QString&)",QString(url));
  7. QVariant title_value = excel.property("Caption"); //获取标题信息
  8. // qDebug()<<"读取Excel标题为:"<<title_value;
  9. QAxObject *work_book = excel.querySubObject("ActiveWorkBook");
  10. QAxObject *work_sheets = work_book->querySubObject("Sheets"); //Sheets也可以换用WorkSheets
  11. int sheet_count = work_sheets->property("Count").toInt(); //获取工作表数目
  12. // qDebug()<<"当前工作表数目为:"<<sheet_count;
  13. exceltip = new Excel(this);
  14. for(int k=1;k<=sheet_count;k++)
  15. {
  16. QAxObject *work_sheet = work_book->querySubObject("Sheets(int)",k); //Sheets(int)也可以用Worksheets(int)
  17. QString work_sheet_name = work_sheet->property("Name").toString(); //获取工作表名称
  18. QString message = QString("Sheet")+QString::number(k,10)+QString("name");
  19. // qDebug()<<message<<work_sheet_name;
  20. if(sheet_count>0)
  21. {
  22. QAxObject *work_sheet = work_book->querySubObject("Sheets(int)",k);
  23. QAxObject *used_range = work_sheet->querySubObject("UsedRange");
  24. QAxObject *rows = used_range->querySubObject("Rows");
  25. // QAxObject *columns = used_range->querySubObject("Columns");
  26. int row_start = used_range->property("Row").toInt(); //获取起始行
  27. int columns_start = used_range->property("Column").toInt(); //获取起始列
  28. int row_count = rows->property("Count").toInt(); //获取行数
  29. // int column_count = columns->property("Count").toInt(); //获取列数
  30. exceltip->show();
  31. ui->pushButton_Cancle->setEnabled(false);
  32. ui->pushButton_close->setEnabled(false);
  33. ui->pushButton_save->setEnabled(false);
  34. ui->pushButton_Excel->setEnabled(false);
  35. ui->pushButton_update->setEnabled(false);
  36. exceltip->setcount(row_count-1,work_sheet_name);
  37. for(int i=row_start+1;i<=row_count;i++)
  38. {
  39. /***********************************
  40. * 数据解析函数函数
  41. * 将Excel中的数据分条取出
  42. * 的别值得注意的是
  43. * 由于数据主码是一当前时间为主码
  44. * 所以要调用延时函数延时1秒
  45. * 防止数据主码相同为数据加载失败
  46. ****************************************************************************************************************/
  47. QAxObject *cell[13];
  48. QVariant cell_value[13];
  49. cell[0] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+0);
  50. cell_value[0] = cell[0]->property("Value"); //获取单元格内容
  51. cell[1] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+1);
  52. cell_value[1] = cell[1]->property("Value");
  53. cell[2] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+2);
  54. cell_value[2] = cell[2]->property("Value");
  55. cell[3] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+3);
  56. cell_value[3] = cell[3]->property("Value");
  57. cell[4] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+4);
  58. cell_value[4] = cell[4]->property("Value");
  59. cell[5] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+5);
  60. cell_value[5] = cell[5]->property("Value");
  61. cell[6] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+6);
  62. cell_value[6] = cell[6]->property("Value");
  63. cell[7] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+7);
  64. cell_value[7] = cell[7]->property("Value");
  65. cell[8] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+8);
  66. cell_value[8] = cell[8]->property("Value");
  67. cell[9] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+9);
  68. cell_value[9] = cell[9]->property("Value");
  69. cell[10] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+10);
  70. cell_value[10] = cell[10]->property("Value");
  71. cell[11] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+11);
  72. cell_value[11] = cell[11]->property("Value");
  73. cell[12] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+12);
  74. cell_value[12] = cell[12]->property("Value");
  75. datasave->CRETM = gettimetss();
  76. datasave->pro_name = cell_value[0].toString();
  77. datasave->PSTM = cell_value[1].toString();
  78. datasave->PETM = cell_value[2].toString();
  79. datasave->Par_name = cell_value[3].toString();
  80. datasave->PARSTM = cell_value[4].toString();
  81. datasave->PARETM = cell_value[5].toString();
  82. datasave->Sta_name = cell_value[6].toString();
  83. datasave->STASTM = cell_value[7].toString();
  84. datasave->STAETM = cell_value[8].toString();
  85. datasave->INFOR = cell_value[9].toString();
  86. datasave->DELTM = cell_value[10].toString();
  87. datasave->REASION = cell_value[11].toString();
  88. datasave->FINTM = cell_value[12].toString();
  89. QString sql_insert = "insert into project values('";
  90. sql_insert +=datasave->pro_name;
  91. sql_insert +="','";
  92. sql_insert +=datasave->PSTM;
  93. sql_insert +="','";
  94. sql_insert +=datasave->PETM;
  95. sql_insert +="','";
  96. sql_insert +=datasave->Par_name;
  97. sql_insert +="','";
  98. sql_insert +=datasave->PARSTM;
  99. sql_insert +="','";
  100. sql_insert +=datasave->PARETM;
  101. sql_insert +="','";
  102. sql_insert +=datasave->Sta_name;
  103. sql_insert +="','";
  104. sql_insert +=datasave->STASTM;
  105. sql_insert +="','";
  106. sql_insert +=datasave->STAETM;
  107. sql_insert +="','";
  108. sql_insert +=datasave->INFOR;
  109. sql_insert +="','";
  110. sql_insert +=datasave->FINTM;
  111. sql_insert +="','";
  112. sql_insert +=datasave->DELTM;
  113. sql_insert +="','";
  114. sql_insert +=datasave->REASION;
  115. sql_insert +="','";
  116. sql_insert +=datasave->CRETM;
  117. sql_insert +="')";
  118. QSqlQuery insert_data(*projectdb);
  119. insert_data.exec(sql_insert);
  120. // qDebug()<<sql_insert;
  121. emit sys_data();
  122. exceltip->setnumber(i);
  123. delaymsec(10);
  124. /****************************************************************************************************************/
  125. }
  126. }
  127. }
  128. exceltip->setfinish(true);
  129. if(exceltip->exec() == QDialog::Accepted)
  130. {
  131. ui->pushButton_Cancle->setEnabled(true);
  132. ui->pushButton_close->setEnabled(true);
  133. ui->pushButton_save->setEnabled(true);
  134. ui->pushButton_Excel->setEnabled(true);
  135. ui->pushButton_update->setEnabled(true);
  136. getname();
  137. }
  138. }
  139. /*******************************************************************************/
  140. void AddDialog::on_pushButton_Excel_clicked() //打开一个Excel文件,完了要调用Excel解析函数
  141. {
  142. QString filename = QFileDialog::getOpenFileName(this);
  143. if(!filename.isEmpty())
  144. {
  145. readExcel(filename);
  146. }
  147. }
  148. //自定义延时函数 //无阻塞延时函数
  149. void AddDialog::delaymsec(int msec)
  150. {
  151. QTime dieTime = QTime::currentTime().addMSecs(msec);
  152. while (QTime::currentTime()<dieTime)
  153. {
  154. QCoreApplication::processEvents(QEventLoop::AllEvents,100);
  155. }
  156. }

 

 

 

 

 

文章来源: dreamlife.blog.csdn.net,作者:DreamLife.,版权归原作者所有,如需转载,请联系作者。

原文链接:dreamlife.blog.csdn.net/article/details/47339341

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。