QT+Excel
记得Excel里面,行和列都是从1开始的,而不是
void NewPage::loadRegistersFromExcel(){
QString desktopDir = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
QString filepath = QFileDialog::getOpenFileName(NULL, "选择Excel", desktopDir, "*.xlsx *.xls");
if (filepath.isEmpty()) {
QMessageBox::information(this, "提示", "未选择文件");
return;
}
QXlsx::Document xlsx(filepath);
if (!xlsx.load()) {
QMessageBox::critical(this, "错误", "无法加载 Excel 文件");
return;
}
QXlsx::Worksheet *worksheet = dynamic_cast<QXlsx::Worksheet*>(xlsx.workbook()->sheet(0));
if (!worksheet) {
qDebug() << "无法获取工作表";
return;
}
// 清空现有的寄存器列表
registerList.clear();
// 从第二行开始读取数据(假设第一行为标题)
for (int row = 2; row < 29; ++row) {
// 读取寄存器地址(假设在第1列)
CellReference addressRef(row, 1);
QString address = worksheet->read(addressRef).toString();
// 读取寄存器描述(假设在第2列)
CellReference descRef(row, 2);
QString description = worksheet->read(descRef).toString();
// 创建新的寄存器对象
Register reg;
reg.address = address;
reg.description = description;
// 读取32个位信息(假设位信息从第3列开始)
for (int col = 3; col <= 34; ++col) {
CellReference bitRef(row, col);
QString bitName = worksheet->read(bitRef).toString();
reg.bitFields.append(bitName);
}
// 将寄存器添加到列表
registerList.append(reg);
}
// 更新寄存器列表视图
updateRegisterListView();
// 如果有数据,选中第一个寄存器
if (!registerList.isEmpty()) {
QModelIndex defaultIndex = registerModel->index(0, 0);
registerListView->setCurrentIndex(defaultIndex);
updateBitGrid(registerList.first().address);
descriptionTextEdit->setText(registerList.first().description);
selectedRegisterLabel->setText("当前寄存器: " + registerList.first().address);
}
}
void NewPage::updateRegisterListView()
{
registerModel->clear();
// 添加数据到模型
foreach (const Register ®, registerList) {
QStandardItem *item = new QStandardItem(reg.address);
registerModel->appendRow(item);
}
// 确认模型中的行数
qDebug() << "模型中共有" << registerModel->rowCount() << "行数据";
}
浙公网安备 33010602011771号