读取一个Excel表格
显示在listview中(listview显示方法)
1.下面是获取excel的方法,但是此方法有一点不适合是因为速度特别慢
void Widget::ScanFile(QString strPath, QString strText)
{
QAxObject *excel = new QAxObject(this);
excel->setControl("Excel.Application"); //链接Excel控件
excel->setProperty("Visible", true); //显示Excel窗口看效果
/*********获取COM文件的一种方式************/
QAxObject *workbooks = excel->querySubObject("WorkBooks");
//获取工作簿(excel文件)集合
workbooks->dynamicCall("Open(const QString&)", strPath);//path至关重要,获取excel文件的路径
//打开一个excel文件
QAxObject *workbook = excel->querySubObject("ActiveWorkBook");
QAxObject *worksheets = workbook->querySubObject("WorkSheets");
int iWorkSheet = worksheets->property("Count").toInt(); //获取sheet的数量
/*********获取COM文件的一种方式************/
2.下面是获取excel表格的行列信息代码
QAxObject *worksheet = workbook->querySubObject("WorkSheets(int)",i);//("WorkSheets(int)",1)访问excel中的工作表中第一个单元格
QAxObject *usedRange = worksheet->querySubObject("UsedRange");//第一页sheet的范围(必须和上一行匹配)
QAxObject *rows, *columns;
rows = usedRange->querySubObject("Rows");//行
columns = usedRange->querySubObject("Columns");//列
int intRow = rows->property("Count").toInt();//行数
int intCol = columns->property("Count").toInt();//列数
QAxObject *strRange = worksheet->querySubObject("Cells(int, int)", j, 1); //获取对应行列的值
QString str = strRange->dynamicCall("Value2()").toString();
3.QAxObject打开excel后要记得关闭,不然会在系统产生很多EXCEL.EXE进程
workbook->dynamicCall("Close()");
excel->dynamicCall("Quit()");
if (excel)
{
delete excel;
excel = NULL;
}
return ;
4.下面是listview的用法,包括list容器(QStandardItem,setModel)
QString strTar;
QStandardItemModel *model = new QStandardItemModel(this);
QList<QStandardItem *> list;
list.push_back(new QStandardItem(strTar));
model->appendRow(list);
ui->m_lvResult->setModel(model);
更快速的方法参考:qt快速读取excel
Qt快速读取数据量很大的Excel文件