QT 创建excel表格,读写excel表格

添加库

QT  += core gui axcontainer

QT创建 excel表格

int MainWindow::createExcel(QString path)
{
//    QString path = "C:/Users/49300/Desktop/ccc.xlsx";
    QAxObject *excel = new QAxObject(this);
    excel->setControl("Excel.Application");//连接Excel控件
    excel->dynamicCall("SetVisible (bool Visible)", "false");//不显示窗体
    excel->setProperty("DisplayAlerts", false);//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示

    QAxObject *workbooks = excel->querySubObject("WorkBooks");//获取工作簿集合
    workbooks->dynamicCall("Add");//新建一个工作簿
    QAxObject *workbook = excel->querySubObject("ActiveWorkBook");//获取当前工作簿
    QAxObject *worksheets = workbook->querySubObject("Sheets");//获取工作表集合
    QAxObject *worksheet = worksheets->querySubObject("Item(int)", 1);//获取工作表集合的工作表1,即sheet1
    workbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(path));//保存至filepath,注意一定要用QDir::toNativeSeparators将路径中的"/"转换为"\",不然一定保存不了。
    workbook->dynamicCall("Close()");//关闭工作簿
    excel->dynamicCall("Quit()");//关闭excel
    delete excel;
    excel = NULL;
    return 0;
}

excel表格读取

int MainWindow::readExcel(QString path)
{
   QAxObject *excel = NULL;
   QAxObject *workbooks = NULL;
   QAxObject *workbook = NULL;
   excel = new QAxObject(this);
   excel->setControl("Excel.Application");
   if (!excel) {
       QMessageBox::critical(NULL, "错误信息", "EXCEL对象丢失");
       return -1;
   }

   excel->dynamicCall("SetVisible(bool)", false);
   workbooks = excel->querySubObject("WorkBooks");
   workbooks->querySubObject("Add");
   workbook = workbooks->querySubObject("Open(const QString&)",path);
   QAxObject * worksheet = workbook->querySubObject("WorkSheets(int)", 1); // 获取第一个工作sheet

   QAxObject * usedrange = worksheet->querySubObject("UsedRange");//获取该sheet的使用范围对象
   QAxObject * rows = usedrange->querySubObject("Rows");
   QAxObject * columns = usedrange->querySubObject("Columns");
   /*获取行数和列数*/

   int intCols = columns->property("Count").toInt();
   int intRows = rows->property("Count").toInt();
   int intRowStart = usedrange->property("Row").toInt();
   int intColStart = usedrange->property("Column").toInt();
   /*获取excel内容*/
   for (int i = intRowStart; i < intRowStart + intRows; i++)  //行
   {
       for (int j = intColStart; j < intColStart + intCols; j++)
       {
           QAxObject *cell = worksheet->querySubObject("Cells(int,int)", i, j);
           QString value = cell->dynamicCall("Value2()").toString();
           qDebug() << __FILE__ << __LINE__ << value;
           delete cell;
       }
   }

   // 关闭excel
   workbook->dynamicCall("Close(Boolean)",true);
   excel->dynamicCall("Quit(void)");
   delete excel;
   excel = NULL;
   return 0;
}

excel表格单元格写入

int MainWindow::writeExcel(QString path)
{
   QAxObject *excel = NULL;
   QAxObject *workbooks = NULL;
   QAxObject *workbook = NULL;
   excel = new QAxObject(this);
   excel->setControl("Excel.Application");
   if (!excel) {
       QMessageBox::critical(NULL, "错误信息", "EXCEL对象丢失");
       return -1;
   }

   excel->dynamicCall("SetVisible(bool)", false);
   workbooks = excel->querySubObject("WorkBooks");
   workbooks->querySubObject("Add");
   workbook = workbooks->querySubObject("Open(const QString&)",path);
   QAxObject * worksheet = workbook->querySubObject("WorkSheets(int)", 1); // 获取第一个工作sheet

   QAxObject *cellInsert = worksheet->querySubObject("Cells(int,int)", 5, 5);
   cellInsert->setProperty("Value", "aaaa");  //设置单元格值
   delete cellInsert;

   // 关闭excel
   workbook->dynamicCall("Close(Boolean)",true);
   excel->dynamicCall("Quit(void)");
   delete excel;
   excel = NULL;
   return 0;
}

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中,我们可以使用QAxObject类来创建和操作Excel文件。首先,我们需要确保已经在Qt项目中包含了这个类的头文件。 接着,我们可以通过QAxObject的实例来创建一个Excel应用程序对象,并且进行一些设置,比如设置是否显示Excel界面、设置工作簿等。然后,我们可以创建一个工作簿对象,并且通过它来访问Excel文件的工作表。 在工作表中,我们可以填入数据、设置格式、插入图表等操作。最后,我们需要保存并关闭Excel文件。 以下是一个简单的示例代码: ```cpp #include <QAxObject> int main(int argc, char *argv[]) { QAxObject *excel = new QAxObject("Excel.Application"); excel->setProperty("Visible", false); QAxObject *workbooks = excel->querySubObject("Workbooks"); QAxObject *workbook = workbooks->querySubObject("Add()"); QAxObject *worksheets = workbook->querySubObject("Worksheets"); QAxObject *worksheet = worksheets->querySubObject("Item(int)", 1); QAxObject *range = worksheet->querySubObject("Range(const QString&)", "A1"); range->dynamicCall("SetValue(const QVariant&)", "Hello, Excel!"); workbook->dynamicCall("SaveAs(const QString&)", "C:/example.xlsx"); workbook->dynamicCall("Close()"); excel->dynamicCall("Quit()"); delete excel; return 0; } ``` 这段代码使用QAxObject类和其相关方法,通过Qt创建了一个名为"example.xlsx"的Excel文件,并在第一个工作表的"A1"单元格中填入了"Hello, Excel!"。然后保存并关闭了Excel文件。这只是一个简单的例子,你可以根据实际需求来扩展和修改代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值