如何使用Qt来操作Excel

 我来答
一点设计演示
高粉答主

2016-01-13 · 职场/教育各类模板,衷于原创
一点设计演示
采纳数:874 获赞数:83616

向TA提问 私信TA
展开全部

Qt操作Excel,无论后缀是xls还是xlsx都可以。

 

1.如下,是下载的一个Excel VBA参考手册,内容不算太全!

 

2.Excel读取

为了便于测试,假设已存在一个excel文件,操作内容已经被红色标记出来。如下所示:

主要读取内容:

标题

工作表数目

工作表名称

起始行

起始列

行数

列数

单元格内容

代码如下:

 

QAxObject excel("Excel.Application");  

excel.setProperty("Visible", true);  

QAxObject *work_books = excel.querySubObject("WorkBooks");  

work_books->dynamicCall("Open (const QString&)",  QString("E:/test.xlsx"));

QVariant title_value = excel.property("Caption");  //获取标题

 

qDebug()<<QString("excel title : ")<<title_value;  

 

QAxObject *work_book = excel.querySubObject("ActiveWorkBook");  

 

QAxObject *work_sheets = work_book->querySubObject("Sheets");   //Sheets也可换用WorkSheets

 

int sheet_count = work_sheets->property("Count").toInt();   //获取工作表数目

 

qDebug()<<QString("sheet count : ")<<sheet_count;  

 

for(int i=1; i<=sheet_count; i++)  

 

{  

 

QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", i);   //Sheets(int)也可换用Worksheets(int)

 

QString work_sheet_name = work_sheet->property("Name").toString();   //获取工作表名称

 

QString message = QString("sheet ")+QString::number(i, 10)+ QString("  name");

 

qDebug()<<message<<work_sheet_name;  

 

}

 

if(sheet_count > 0)

 

{

 

QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", 1);   

 

QAxObject *used_range = work_sheet->querySubObject("UsedRange");   

 

QAxObject *rows = used_range->querySubObject("Rows");  

 

QAxObject *columns = used_range->querySubObject("Columns");  

 

int row_start = used_range->property("Row").toInt();  //获取起始行    

 

int column_start = used_range->property("Column").toInt();   //获取起始列

 

int row_count = rows->property("Count").toInt();  //获取行数

 

int column_count = columns->property("Count").toInt();   //获取列数

 

for(int i=row_start; i

 

{  

 

for(int j=column_start; j

 

{  

 

QAxObject *cell = work_sheet->querySubObject("Cells(int,int)", i, j);   

 

QVariant cell_value = cell->property("Value");  //获取单元格内容

 

QString message = QString("row-")+QString::number(i,  10)+QString("-column-")+QString::number(j, 10)+QString(":");

 

qDebug()<<message<<cell_value;  

 

}  

 

}  

 

}

 

 

 

3.效果如下:

 

 

 

4.Excel增、删、改

主要操作:

设置标题

插入工作表(至最后一行)

设置工作表名称

删除工作表

设置单元格内容

设置单元格字体(类型、大小、加粗、斜体、下划线、颜色等)

设置单元格对齐方式

设置单元格高度、宽度

设置单元格背景色、边框色

合并/拆分单元格

清空单元格

代码如下:

 

 

 

 

QAxObject excel("Excel.Application");  

 

excel.setProperty("Visible", true);  

 

QAxObject *work_books = excel.querySubObject("WorkBooks");  

 

work_books->dynamicCall("Open(const QString&)",  "E:\\test.xlsx");

 

excel.setProperty("Caption", "Qt Excel");

 

QAxObject *work_book = excel.querySubObject("ActiveWorkBook");  

 

QAxObject *work_sheets = work_book->querySubObject("Sheets");   //Sheets也可换用WorkSheets

//删除工作表(删除第一个)

 

QAxObject *first_sheet = work_sheets->querySubObject("Item(int)",  1);

 

first_sheet->dynamicCall("delete");

 

//插入工作表(插入至最后一行)

 

int sheet_count = work_sheets->property("Count").toInt();   //获取工作表数目

 

QAxObject *last_sheet = work_sheets->querySubObject("Item(int)",  sheet_count);

 

QAxObject *work_sheet = work_sheets->querySubObject("Add(QVariant)",  last_sheet->asVariant());

 

last_sheet->dynamicCall("Move(QVariant)",  work_sheet->asVariant());

 

work_sheet->setProperty("Name", "Qt Sheet");  //设置工作表名称

 

//操作单元格(第2行第2列)

 

QAxObject *cell = work_sheet->querySubObject("Cells(int,int)", 2,  2);

 

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()");  //清空单元格内容

 

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));   //设置单元格字体颜色(红色)

 

//设置单元格内容,并合并单元格(第5行第3列-第8行第5列)

 

QAxObject *cell_5_6 = work_sheet->querySubObject("Cells(int,int)", 5,  3);

 

cell_5_6->setProperty("Value", "Java");  //设置单元格值

 

QAxObject *cell_8_5 = work_sheet->querySubObject("Cells(int,int)", 8,  5);

 

cell_8_5->setProperty("Value", "C++");

 

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->setProperty("HorizontalAlignment", -4108);

 

merge_range->setProperty("VerticalAlignment", -4108);

 

merge_range->setProperty("WrapText", true);

 

merge_range->setProperty("MergeCells", true);  //合并单元格

 

//merge_range->setProperty("MergeCells", false);  //拆分单元格

 

 

 

//work_book->dynamicCall("Save()");   //保存文件(为了对比test与下面的test2文件,这里不做保存操作)  work_book->dynamicCall("SaveAs(const QString&)", "E:\\test2.xlsx");   //另存为另一个文件 

 

work_book->dynamicCall("Close(Boolean)", false);  //关闭文件

 

excel.dynamicCall("Quit(void)");  //退出

 

5.效果如下:

 

操作前:

 

操作后:

 

 

 

 

 

 

huanglenzhi
推荐于2016-07-27 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517196
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
1、显示当前窗口:
excel.setProperty("Visible", true);
2、更改 Excel 标题栏:
excel.setProperty("Caption", "Invoke Microsoft Excel");
3、添加新工作簿:
QAxObject * workbooks = excel.querySubObject("WorkBooks");
workbooks->dynamicCall("Add");
4、打开已存在的工作簿:
workbooks->dynamicCall("Open (const QString&)", QString("c:/test.xls"));
5、获取活动工作簿:
QAxObject * workbook = excel.querySubObject("ActiveWorkBook");
6、获取所有的工作表:
QAxObject * worksheets = workbook->querySubObject("WorkSheets");
7、获取工作表数量:
int intCount = worksheets->property("Count").toInt();
8、获取第一个工作表:
QAxObject * worksheet = workbook->querySubObject("Worksheets(int)", 1);
9、获取cell的值:
QAxObject * range = worksheet->querySubObject("Cells(int,int)", 1, 1 );
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式