前言:
今天我们对“netexcel读取文件”大约比较看重,兄弟们都需要知道一些“netexcel读取文件”的相关文章。那么小编在网络上收集了一些对于“netexcel读取文件””的相关知识,希望我们能喜欢,姐妹们快快来了解一下吧!网上很多QT读取Excel文件方式都是如下形式,太慢了,打开文件+读取文件要6s以上,实在是太慢了!
QAxObject excel("Excel.Application"); excel.setProperty("Visible", false); QAxObject *work_books = excel.querySubObject("WorkBooks"); work_books->dynamicCall("Open (const QString&)", filePath); QAxObject *work_book = excel.querySubObject("ActiveWorkBook"); QAxObject *work_sheets = work_book->querySubObject("Sheets"); //Sheets也可换用WorkSheets int sheet_count = work_sheets->property("Count").toInt(); //获取工作表数目 if(sheet_count > 0) { QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", 1); QAxObject *used_range = work_sheet->querySubObject("UsedRange"); QAxObject *rows = used_range->querySubObject("Rows"); int row_count = rows->property("Count").toInt(); //获取行数 //QString txt = work_sheet->querySubObject("Cells(int,int)", i, 1)->property("Value").toString(); //获取单元格内容 work_book->dynamicCall("Close(Boolean)", false); //关闭文件 excel.dynamicCall("Quit(void)"); //退出 }
后面在网上找到一种方法:libxl,大概字需要17ms,简直不是一个级别的
【领音视频+QT学习资料,点击下方链接免费领取↓↓,先码住不迷路~】
点击→Qt开发进阶技术栈学习路线和资料
下面说下libxl的使用方法:
(1)加载动态链接库libxl.lib,我上个博客有仔细讲怎么加载lib
(2)包含头文件
#include "libxl.h"using namespace libxl;
(3)使用头文件中的函数
(4)实际运用,将excel文件中的内容读取后,写到界面的tableWidget中
void InputName::readExcel(QString filePath){ Book *book = NULL; if(filePath.endsWith("xls",Qt::CaseInsensitive))//判断是否是.xls文件,不区分大小写 { //qDebug() << "xls"; book = xlCreateBook(); // xlCreateBook() for xls } else if(filePath.endsWith("xlsx",Qt::CaseInsensitive))//判断是否是.xlsx文件,不区分大小写 { //qDebug() << "xlsx"; book = xlCreateXMLBook(); // xlCreateXMLBook() for xlsx } bool f=book->load(filePath.toLocal8Bit());//加载excel文件,toLocal8Bit是为了支持中文命名的文件 CellType ct; if(book) { Sheet *sheet =book->getSheet(0);//表1 int cellnum; qDebug() << "row:" <<sheet->lastRow();//有多少行,注意:有些行是空行,没有数据但是也要计入 //写训练数据与label for (int i=1;i<sheet->lastRow();i++) { for (int j=1;j<3;j++) { ct = sheet->cellType(i,j);//单元格的数据类型 1表示是数字 2表示是字符串 if(ct == 2) { QTableWidgetItem *NameItem = new QTableWidgetItem(QString::fromLocal8Bit(sheet->readStr(i,j)));//读取字符串 NameItem->setTextAlignment(Qt::AlignCenter); ui->tableWidget->setItem(i-1,j,NameItem); } else if(ct == 1) { QTableWidgetItem *NameItem = new QTableWidgetItem(QString::number((int)sheet->readNum(i,j)));//读取数字 NameItem->setTextAlignment(Qt::AlignCenter); ui->tableWidget->setItem(i-1,j,NameItem); } } } } else { QMessageBox::information(this,tr("错误"),tr("文件打开失败!")); }}
点击读取按钮选择excel文件
void InputName::on_importbut_clicked(){ QString strFile = QFileDialog::getOpenFileName(this,"选择文件","./","文本文件(*.xls;*.xlsx;)"); if (strFile.isEmpty()) { return; } readExcel(strFile); for(int i=0; i<TotalPlayerNumber; i++) { PlayerName[i] = ui->tableWidget->item(i,1)->text(); WorkSpaceName[i] = ui->tableWidget->item(i,2)->text(); } QMessageBox::information(this,tr("提示"),tr("表格导入成功!"));}
标签: #netexcel读取文件