Qt操作excel基本方法


1:连接控件Excel
2: 打开工作簿(新建或打开Excel文件)
3: 打开sheet
4: 获取行数,列数
5: 读和写
6:设置样式
7: 保存文件
8:另存为
9:关闭文件




1:连接控件Excel
QAxObject excel("Excel.Application");//连接Excel控件
excel.setProperty("Visible", false);// 不显示窗体
excel->setProperty("DisplayAlerts", false);  // 不显示任何警告信息。如果为true, 那么关闭时会出现类似"文件已修改,是否保存"的提示


2: 打开工作簿(新建或打开Excel文件)
  QAxObject* workbooks = excel->querySubObject("WorkBooks"); // 获取工作簿集合
  2.1新建
  workbooks->dynamicCall("Add"); // 新建一个工作簿
  QAxObject* workbook = excel->querySubObject("ActiveWorkBook"); // 获取当前工作簿
  2.2打开
  QAxObject* workbook = workbooks->querySubObject("Open(const QString&)", ("C:/Users/lixc/Desktop/tt2.xlsx"));
3: 打开sheet
QAxObject* worksheet = workbook->querySubObject("WorkSheets(int)", 1); // 获取工作表集合的工作表1, 即sheet1
4: 获取行数,列数
	QAxObject* usedrange = worksheet->querySubObject("UsedRange"); // sheet范围
    int intRowStart = usedrange->property("Row").toInt(); // 起始行数   为1
    int intColStart = usedrange->property("Column").toInt();  // 起始列数 为1


    QAxObject *rows, *columns;
    rows = usedrange->querySubObject("Rows");  // 行
    columns = usedrange->querySubObject("Columns");  // 列


    int intRow = rows->property("Count").toInt(); // 行数
    int intCol = columns->property("Count").toInt();  // 列数
     qDebug()<<"intRowStart:"<<intRowStart<<"\t intColStart"<<intColStart;
    qDebug()<<"intRow"<<intRow<<"\t intCol"<<intCol;
5: 读和写
	5.1读取单元格方式1
	for(int i=intRowStart;i<intRow+intRowStart;i++)
    {
        for(int j=intColStart;j<intCol+intColStart;j++)
        {
            QAxObject* cell = worksheet->querySubObject("Cells(int, int)", i, j);  //获单元格值
            qDebug() << i << j << cell->dynamicCall("Value2()").toString();
        }
    }
	5.2读取单元格方式2
	QString X = "A2"; //设置要操作的单元格,A1
    QAxObject* cellX = worksheet->querySubObject("Range(QVariant, QVariant)", X); //获取单元格
    qDebug() << cellX->dynamicCall("Value2()").toString();
	5.3写单元格方式1
	cellX->dynamicCall("SetValue(conts QVariant&)", 100); // 设置单元格的值
	5.4写单元格方式2
	QAxObject *cell_5_6 = worksheet->querySubObject("Cells(int,int)", 5, 6);
    cell_5_6->setProperty("Value2", "Java");
6:设置样式(未测试)
	//获得单元格对象
	QAxObject* cell = worksheet->querySubObject("Cells(int, int)", i, j);  
	6.1设置单元格内容的显示setProperty()
	   cell->setProperty("Value", "Java C++ C# PHP Perl Python Delphi Ruby");  //设置单元格值
	   cell->setProperty("RowHeight", 50);  //设置单元格行高
	   cell->setProperty("ColumnWidth", 30);  //设置单元格列宽
	   cell->setProperty("HorizontalAlignment", -4108); //左对齐(xlLeft):-4131  居中(xlCenter):-4108  右对齐(xlRight):-4152
	   cell->setProperty("VerticalAlignment", -4108);  //上对齐(xlTop)-4160 居中(xlCenter):-4108  下对齐(xlBottom):-4107
	   cell->setProperty("WrapText", true);  //内容过多,自动换行
	   cell->dynamicCall("ClearContents()");  //清空单元格内容
	6.2设置单元格的样式	QAxObject* interior = cell->querySubObject("Interior");
	   QAxObject* interior = cell->querySubObject("Interior");
	   interior->setProperty("Color", QColor(0, 255, 0));   //设置单元格背景色(绿色)
       QAxObject* border = cell->querySubObject("Borders");
       border->setProperty("Color", QColor(0, 0, 255));   //设置单元格边框色(蓝色)
       QAxObject *font = cell->querySubObject("Font");  //获取单元格字体
       font->setProperty("Name", QStringLiteral("华文彩云"));  //设置单元格字体
       font->setProperty("Bold", true);  //设置单元格字体加粗
       font->setProperty("Size", 20);  //设置单元格字体大小
       font->setProperty("Italic", true);  //设置单元格字体斜体
       font->setProperty("Underline", 2);  //设置单元格下划线
       font->setProperty("Color", QColor(255, 0, 0));  //设置单元格字体颜色(红色)
	6.3合并拆分单元格
	   QString merge_cell;
       merge_cell.append(QChar(3 - 1 + 'A'));  //初始列
       merge_cell.append(QString::number(5));  //初始行
       merge_cell.append(":");
       merge_cell.append(QChar(5 - 1 + 'A'));  //终止列
       merge_cell.append(QString::number(8));  //终止行
       QAxObject *merge_range = work_sheet->querySubObject("Range(const QString&)", merge_cell);
	   //merge_range 可以设置单元格属性
	   merge_range->setProperty("MergeCells", true);  //合并单元格
       //merge_range->setProperty("MergeCells", false);  //拆分单元格
7: 保存文件
	7.1保存当前文件(根据已经打开的工作簿,如果工作簿是新建的文件保存默认存储于Document文件夹中)
	 workbook->dynamicCall("Save()");  //保存文件
    7.2指定目录存储
	QString fileName = QFileDialog::getSaveFileName(NULL, QStringLiteral("保存文件"), QStringLiteral("excel名称"), QStringLiteral("EXCEL(*.xlsx)"));
    //QString fileName=QStringLiteral("C:/Users/lixc/Desktop/excel名称.xlsx");
    workbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(fileName)); //保存到filepath
    // 注意一定要用QDir::toNativeSeparators, 将路径中的"/"转换为"\", 不然一定保存不了
9:关闭文件
	 workbook->dynamicCall("Close (Boolean)", false);  //关闭文件
	 excel.dynamicCall("Quit(void)");  //退出
	 如果excel存在于堆上,注意手动释放
	 delete excel;
注意:调试过程中出现异常:需要打开任务管理器,结束Excle进程
//获得单元格对象
QAxObject* cell = worksheet->querySubObject("Cells(int, int)", i, j);  
代码下载
  • 17
    点赞
  • 182
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Qt提供了QAxObject类来操作Microsoft Excel文件。以下是Qt操作Excel文件的基本步骤: 1. 引入头文件 ```cpp #include <QAxObject> ``` 2. 创建Excel对象 ```cpp QAxObject *excel = new QAxObject("Excel.Application", this); ``` 3. 打开Excel文件 ```cpp QAxObject *workbooks = excel->querySubObject("Workbooks"); QAxObject *workbook = workbooks->querySubObject("Open(const QString&)", "excel_file_path"); ``` 4. 获取工作表 ```cpp QAxObject *worksheets = workbook->querySubObject("Worksheets"); QAxObject *worksheet = worksheets->querySubObject("Item(int)", 1); //获取第一个工作表 ``` 5. 操作单元格 ```cpp QAxObject *cell = worksheet->querySubObject("Cells(int,int)", row, column); cell->setProperty("Value", cell_value); //设置单元格值 QString cell_value = cell->property("Value").toString(); //获取单元格值 ``` 6. 保存Excel文件 ```cpp workbook->dynamicCall("Save()"); ``` 7. 关闭Excel文件 ```cpp workbook->dynamicCall("Close()"); excel->dynamicCall("Quit()"); ``` 完整代码示例: ```cpp #include <QAxObject> void operateExcel() { QAxObject *excel = new QAxObject("Excel.Application", this); QAxObject *workbooks = excel->querySubObject("Workbooks"); QAxObject *workbook = workbooks->querySubObject("Open(const QString&)", "excel_file_path"); QAxObject *worksheets = workbook->querySubObject("Worksheets"); QAxObject *worksheet = worksheets->querySubObject("Item(int)", 1); QAxObject *cell = worksheet->querySubObject("Cells(int,int)", 1, 1); cell->setProperty("Value", "Hello, world!"); workbook->dynamicCall("Save()"); workbook->dynamicCall("Close()"); excel->dynamicCall("Quit()"); } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值