QT使用dsoframer.ocx组件打开excel,如何判断excel的单元格是或否修改
时间: 2024-02-20 22:01:06 浏览: 156
使用dsoframer.ocx组件在QT中打开Excel文件可以借助Qt的ActiveQt模块。而要判断Excel表格中的单元格是否被修改,可以通过获取单元格的值,与之前保存的值进行对比,如果不一致,则说明单元格已被修改。具体实现步骤如下:
1. 在QT项目中添加ActiveQt模块,具体操作方法可以参考QT官方文档;
2. 在需要打开Excel文件的地方,使用QAxWidget加载dsoframer.ocx组件,并打开Excel文件,具体代码如下:
```
QAxWidget *m_axWidget;
m_axWidget = new QAxWidget(this);
m_axWidget->setControl("{0002E55D-0000-0000-C000-000000000046}");
m_axWidget->setProperty("DisplayAlerts", false);
m_axWidget->setProperty("DisplayScrollBars", true);
m_axWidget->setProperty("DisplayTitleBar", false);
m_axWidget->setProperty("DisplayStatusBar", true);
m_axWidget->setProperty("AutoScroll", true);
m_axWidget->setProperty("ReadOnly", false);
m_axWidget->setProperty("EnableEvents", false);
m_axWidget->dynamicCall("Open(const QString&)", "your_excel_file_path");
```
3. 在需要判断单元格是否被修改的地方,获取指定单元格的值并与之前保存的值进行比较,代码如下:
```
QAxObject *workbook = m_axWidget->querySubObject("ActiveWorkbook");
QAxObject *worksheet = workbook->querySubObject("Worksheets(int)", 1);//获取第一个worksheet
QAxObject *cell = worksheet->querySubObject("Cells(int,int)", row, column);//获取指定单元格
QString cellValue = cell->dynamicCall("Value2()").toString();//获取单元格的值
if(cellValue != savedValue){
//单元格已被修改
}
```
其中,row和column分别表示单元格的行号和列号,savedValue为之前保存的单元格值。如果单元格的值与之前保存的值不一致,则说明单元格已被修改。
阅读全文