Qt打开固定路径下的所有的.xlsx文件,并且读取每个文件的表格中是否含有“时间”字符,如果有打印位置到控件text Browser中b
时间: 2024-03-17 08:43:43 浏览: 81
Interface-Automation-Test-pandas读取xlsx文件
可以使用Qt自带的QDir类来遍历指定路径下的所有.xlsx文件,再使用QAxObject类来读取Excel文件中的表格内容。以下是一个简单的实现示例:
```cpp
QDir dir("path/to/folder"); // 指定文件夹路径
foreach (QString file, dir.entryList(QStringList() << "*.xlsx", QDir::Files)) {
// 遍历所有.xlsx文件
QAxObject *excel = new QAxObject("Excel.Application");
QAxObject *workbooks = excel->querySubObject("Workbooks");
QAxObject *workbook = workbooks->querySubObject("Open(const QString&)", dir.absoluteFilePath(file));
QAxObject *sheets = workbook->querySubObject("Worksheets");
int sheetCount = sheets->dynamicCall("Count()").toInt();
for (int i = 1; i <= sheetCount; i++) {
QAxObject *sheet = sheets->querySubObject("Item(int)", i);
QAxObject *usedRange = sheet->querySubObject("UsedRange");
QAxObject *rows = usedRange->querySubObject("Rows");
QAxObject *columns = usedRange->querySubObject("Columns");
int rowCount = rows->dynamicCall("Count()").toInt();
int columnCount = columns->dynamicCall("Count()").toInt();
for (int row = 1; row <= rowCount; row++) {
for (int column = 1; column <= columnCount; column++) {
QAxObject *cell = sheet->querySubObject("Cells(int,int)", row, column);
QString value = cell->dynamicCall("Value()").toString();
if (value.contains("时间")) {
ui->textBrowser->append(QString("文件 %1, 表格 %2, 位置 %3").arg(file).arg(i).arg(cell->dynamicCall("Address()").toString()));
}
cell->clear();
delete cell;
}
}
delete sheet;
}
workbook->dynamicCall("Close()");
delete workbook;
delete workbooks;
excel->dynamicCall("Quit()");
delete excel;
}
```
其中,`path/to/folder`需要替换为实际的文件夹路径。这段代码会依次打开每个.xlsx文件,遍历每个表格中的每个单元格,如果单元格中包含“时间”字符,则将位置信息打印到text Browser中。注意,在每个单元格使用完后要清除并删除QAxObject对象,否则会导致内存泄漏。
阅读全文