给楼主发一段代码:
.pro文件中加:
CONFIG += qaxcontainer
下面是 .cpp
#ifdef Q_WS_WIn
#include <windows.h>
#include <ActiveQt>
#endif
//{{{
QAxObject *excel = new QAxObject("Excel.Application");
QAxObject *workbooks = NULL;
QAxObject *workbook = NULL;
QAxObject *sheets = NULL;
QAxObject *sheet = NULL;
QAxObject *range = NULL;
QAxObject *cell = NULL;
if (!excel)
{
QMessageBox::critical(this, "提示", "excel对象丢失, 跳过当前文件");
continue;
}
excel->dynamicCall("SetVisible(bool)", false);
workbooks = excel->querySubObject("Workbooks");
if (!workbooks)
{
QMessageBox::critical(this, "提示",
"workbooks对象丢失, 跳过当前文件");
excel->dynamicCall("Quit()");
delete excel;
continue;
}
workbook = workbooks
->querySubObject("Open(QString)", slFile);
if (!workbook)
{
QMessageBox::critical(this, "提示",
"workbook对象丢失, 跳过当前文件");
excel->dynamicCall("Quit()");
delete workbooks;
delete excel;
continue;
}
sheets = workbook->querySubObject("Sheets");
if (!sheets)
{
QMessageBox::critical(this, "提示",
"sheets对象丢失, 跳过当前文件");
excel->dynamicCall("Quit()");
delete workbook;
delete workbooks;
delete excel;
continue;
}
sheet = sheets->querySubObject("Item(int)", 1);
if (!sheet)
{
QMessageBox::critical(this, "提示", "sheet对象丢失, 跳过当前文件");
excel->dynamicCall("Quit()");
delete sheets;
delete workbook;
delete workbooks;
delete excel;
continue;
}
sheet->dynamicCall("Select()");
cell = sheet->querySubObject("UsedRange");
rows = cell->querySubObject("Rows")->dynamicCall("count").toInt();
columns = cell->querySubObject("Columns")
->dynamicCall("count").toInt();
delete cell;
//判断表中i行columns列是否有数据
bool hasData = false;
for (int j = 1; j < columns; j++)
{
range = sheet->querySubObject("Cells(int, int)", 2, j);
if (range->dynamicCall("Value()").toString().trimmed()
.isEmpty())
{
delete range;
continue;
}
else
{
hasData = true;
delete range;
break;
}
}
if (!hasData)
{
progress.setText("文档中没有数据,跳过...");
QApplication::processEvents();
excel->dynamicCall("Quit()");
delete sheet;
delete sheets;
delete workbook;
delete workbooks;
delete excel;
continue;
}
//}}}
QString strSerial;
//导入数据到缓存
for (int k = 2; k <= rows; k++)
{
progress.setText(QString("正在读取第%1条记录\n文件名: %2")
.arg(k - 1).arg(slFile));
QApplication::processEvents();
serialNumber++;
strSerial = QString::number(serialNumber);
strSerial.prepend(
QString(4-QString::number(serialNumber).size(), '0'));
range = sheet->querySubObject("Cells(int, int)", k, 1);
rowMap["mia_f12"] = range->dynamicCall("Value()")
.toString().trimmed();
delete range;
range = sheet->querySubObject("Cells(int, int)", k, 2);
rowMap["mia_f13"] = range->dynamicCall("Value()")
.toString().trimmed();
delete range;
range = sheet->querySubObject("Cells(int, int)", k, 3);
rowMap["mia_f9"] = range->dynamicCall("Value()")
.toString().trimmed();
delete range;
range = sheet->querySubObject("Cells(int, int)", k, 4);
rowMap["mia_f1"] = range->dynamicCall("Value()")
.toString().trimmed();
delete range;
range = sheet->querySubObject("Cells(int, int)", k, 5);
rowMap["mia_f4"] = range->dynamicCall("Value()")
.toString().trimmed();
delete range;
range = sheet->querySubObject("Cells(int, int)", k, 6);
rowMap["mia_f5"] = range->dynamicCall("Value()")
.toString().trimmed().replace('-', "");
delete range;
range = sheet->querySubObject("Cells(int, int)", k, 7);
rowMap["mia_f14"] = range->dynamicCall("Value()")
.toString().trimmed();
delete range;
range = sheet->querySubObject("Cells(int, int)", k, 8);
rowMap["mia_f2"] = range->dynamicCall("Value()")
.toString().trimmed().replace("-", "");
delete range;
range = sheet->querySubObject("Cells(int, int)", k, 9);
rowMap["mia_d1"] = range->dynamicCall("Value()")
.toString().trimmed();
delete range;
range = sheet->querySubObject("Cells(int, int)", k, 10);
rowMap["mia_d2"] = range->dynamicCall("Value()")
.toString().trimmed();
range = sheet->querySubObject("Cells(int, int)", k, 11);
rowMap["mia_d3"] = range->dynamicCall("Value()")
.toString().trimmed();
delete range;
range = sheet->querySubObject("Cells(int, int)", k, 12);
rowMap["mia_d4"] = range->dynamicCall("Value()")
.toString().trimmed();
delete range;
/*
range = sheet->querySubObject("Cells(int, int)", i, 13);
rowMap["mia_f8"] = range->dynamicCall("Value()")
.toString().trimmed();
delete range;
*/
range = sheet->querySubObject("Cells(int, int)", k, 14);
rowMap["mia_f15"] = range->dynamicCall("Value()")
.toString().trimmed().replace("-", "");
delete range;
{
// 12, 13, 9, 14
QString strTemp2 = rowMap["mia_f12"];
// 如不在系统已有标签表中,则记录增加
if (!strTemp2.isEmpty()
&& !mapLabel[1001].contains(strTemp2)
&& !mapLabelNew[1001].contains(strTemp2))
{
mapLabelNew[1001] << strTemp2;
}
strTemp2 = rowMap["mia_f13"];
// 如不在系统已有标签表中,则记录增加
if (!strTemp2.isEmpty()
&& !mapLabel[1002].contains(strTemp2)
&& !mapLabelNew[1002].contains(strTemp2))
{
mapLabelNew[1002] << strTemp2;
}
strTemp2 = rowMap["mia_f9"];
// 如不在系统已有标签表中,则记录增加
if (!strTemp2.isEmpty()
&& !mapLabel[1003].contains(strTemp2)
&& !mapLabelNew[1003].contains(strTemp2))
{
mapLabelNew[1003] << strTemp2;
}
strTemp2 = rowMap["mia_f14"];
// 如不在系统已有标签表中,则记录增加
if (!strTemp2.isEmpty()
&& !mapLabel[1004].contains(strTemp2)
&& !mapLabelNew[1004].contains(strTemp2))
{
mapLabelNew[1004] << strTemp2;
}
}
dataList.push_back(rowMap);
}
excel->dynamicCall("Quit()");
delete sheet;
delete sheets;
delete workbook;
delete workbooks;
delete excel;