使用Qt 读取Excel 里面的数据。数据用QString 存储:
结构体:
struct SheetData
{
QString SheetName;
QList<QStringList> RowsDataList;
};
代码如下:
void CExcelRead::ReadExcel(QString filename, QList<SheetData>& _workbookData)
{
QAxObject* p_AxExcel = new QAxObject("Excel.Application");
if (p_AxExcel)
{
p_AxExcel->dynamicCall("SetVisible(Boolean)", false);
}
QAxObject* workbooks = p_AxExcel->querySubObject("WorkBooks");
if (NULL == workbooks)
{
return;
}
QAxObject* workbook = workbooks->querySubObject("Open(QString&)", filename);
//QAxObject* workbook = p_AxExcel->querySubObject("ActiveWorkBook");
if (NULL == workbook)
{
return;
}
QAxObject* worksheets = workbook->querySubObject("WorkSheets");
int isheets = worksheets->property("Count").toInt();
SheetData _sheetData;
for (int i = 1; i < isheets + 1; i++)
{
_sheetData.RowsDataList.clear();
if (GetSheetData(worksheets, i, _sheetData))
{
_workbookData.append(_sheetData);
}
else
{
break;
return;
}
}
workbook->dynamicCall("Close(Boolean)", true);
p_AxExcel->dynamicCall("Quit()");
delete (worksheets);
delete (workbook);
delete (workbooks);
delete (p_AxExcel);
}
bool CExcelRead::GetSheetData(QAxObject* worksheets, int index, SheetData& _sheetData)
{
QAxObject* worksheet = worksheets->querySubObject("Item(int)", index);
if (NULL == worksheet)
{
return false;
}
_sheetData.SheetName = worksheet->property("Name").toString();
if (NULL == worksheet)
{
return false;
}
QAxObject* used_range = worksheet->querySubObject("UsedRange");
QVariantList valueVa;
if (EXCEL_TYPE == EXCEL_MICRO)
{
valueVa = used_range->property("Value").toList();
}
else if (EXCEL_TYPE == EXCEL_WPS)
{
valueVa = used_range->dynamicCall("Value2()").toList();
}
for (int i = 0; i < valueVa.count(); i++)
{
_sheetData.RowsDataList.append(valueVa.at(i).toStringList());
// _sheetData.RowsDataList.append(valueVa);
}
delete used_range;
delete worksheet;
return true;
}
void CExcelRead::WriteExcel(QString xlsFile, QList<QVariant>& variantList)
{
QAxObject* p_AxExcel = new QAxObject("Excel.Application");
if (p_AxExcel)
{
p_AxExcel->dynamicCall("SetVisible(Boolean)", false);
p_AxExcel->setProperty("DisplayAlerts", false);
}
QAxObject* workbooks = p_AxExcel->querySubObject("WorkBooks");
if (NULL == workbooks)
{
return;
}
workbooks->querySubObject("Add");
// QAxObject* workbook = workbooks->querySubObject("Open(QString&)", xlsFile);
QAxObject* workbook = p_AxExcel->querySubObject("ActiveWorkBook");
if (NULL == workbook)
{
return;
}
QAxObject* worksheets = workbook->querySubObject("WorkSheets");
QAxObject* worksheet = worksheets->querySubObject("Item(int)", 1);
QAxObject* range = worksheet->querySubObject("Range(const QString&)", QString("(A1: G1)"));
QList<QVariant> variant;
variant << L8B("需求ID")<< L8B("测试项目")<< L8B("前提条件")<< L8B("期望输出")<< L8B("备注")<< L8B("测试结果")<< L8B("错误信息");
range->dynamicCall("SetValue", QVariant(variant));
//range->setProperty("Value", QVariant(variant));
delete (range);
for (int i = 0; i < variantList.count(); i++)
{
QString start = QString("A%1").arg(i + 2);
QString end = QString("G%1").arg(i + 2);
QAxObject* range = worksheet->querySubObject("Range(const QString&)", QString("(" + start + ": " + end + ")"));
if (EXCEL_TYPE == EXCEL_MICRO)
{
range->setProperty("Value", variantList[i]);
}
else if (EXCEL_TYPE == EXCEL_WPS)
{
range->dynamicCall("SetValue", variantList[i]);
}
delete (range);
}
QAxObject* A = worksheet->querySubObject("Columns(const QString&)", "A");
A->setProperty("ColumnWidth", 20);
A->setProperty("WrapText", true);
delete (A);
A = worksheet->querySubObject("Columns(const QString&)", "B");
A->setProperty("ColumnWidth", 40);
A->setProperty("WrapText", true);
delete (A);
A = worksheet->querySubObject("Columns(const QString&)", "C");
A->setProperty("ColumnWidth", 40);
A->setProperty("WrapText", true);
delete (A);
A = worksheet->querySubObject("Columns(const QString&)", "D");
A->setProperty("ColumnWidth", 40);
A->setProperty("WrapText", true);
delete (A);
A = worksheet->querySubObject("Columns(const QString&)", "E");
A->setProperty("ColumnWidth", 40);
A->setProperty("WrapText", true);
delete (A);
A = worksheet->querySubObject("Columns(const QString&)", "F");
A->setProperty("ColumnWidth", 10);
A->setProperty("WrapText", true);
delete (A);
A = worksheet->querySubObject("Columns(const QString&)", "G");
A->setProperty("ColumnWidth", 40);
A->setProperty("WrapText", true);
delete (A);
workbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(xlsFile));
workbook->dynamicCall("Close(Boolean)", true);
p_AxExcel->dynamicCall("Quit()");
delete (worksheet);
delete (worksheets);
delete (workbook);
delete (workbooks);
delete (p_AxExcel);
}