Qt下Excel操作Word文件下载.docx
- 文档编号:16478250
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:11
- 大小:184.93KB
Qt下Excel操作Word文件下载.docx
《Qt下Excel操作Word文件下载.docx》由会员分享,可在线阅读,更多相关《Qt下Excel操作Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
QAxObject*work_books=excel.querySubObject("
WorkBooks"
work_books->
dynamicCall("
Open(constQString&
)"
QString("
E:
/test.xlsx"
));
QVarianttitle_value=excel.property("
Caption"
//获取标题
qDebug()<
<
QString("
exceltitle:
"
)<
title_value;
QAxObject*work_book=excel.querySubObject("
ActiveWorkBook"
QAxObject*work_sheets=work_book->
querySubObject("
Sheets"
//Sheets也可换用WorkSheets
intsheet_count=work_sheets->
property("
Count"
).toInt();
//获取工作表数目
sheetcount:
sheet_count;
for(inti=1;
i<
=sheet_count;
i++)
{
QAxObject*work_sheet=work_book->
Sheets(int)"
i);
//Sheets(int)也可换用Worksheets(int)
QStringwork_sheet_name=work_sheet->
Name"
).toString();
//获取工作表名称
QStringmessage=QString("
sheet"
)+QString:
:
number(i,10)+QString("
name"
message<
work_sheet_name;
}
if(sheet_count>
0)
{
1);
QAxObject*used_range=work_sheet->
UsedRange"
QAxObject*rows=used_range->
Rows"
QAxObject*columns=used_range->
Columns"
introw_start=used_range->
Row"
//获取起始行
intcolumn_start=used_range->
Column"
//获取起始列
introw_count=rows->
//获取行数
intcolumn_count=columns->
//获取列数
for(inti=row_start;
i
for(intj=column_start;
j
QAxObject*cell=work_sheet->
Cells(int,int)"
i,j);
QVariantcell_value=cell->
Value"
//获取单元格内容
row-"
number(i,10)+QString("
-column-"
number(j,10)+QString("
"
cell_value;
}
效果如下:
Excel增、删、改
主要操作:
∙设置标题
∙插入工作表(至最后一行)
∙设置工作表名称
∙删除工作表
∙设置单元格内容
∙设置单元格字体(类型、大小、加粗、斜体、下划线、颜色等)
∙设置单元格对齐方式
∙设置单元格高度、宽度
∙设置单元格背景色、边框色
∙合并/拆分单元格
∙清空单元格
Open(constQString&
"
\\test.xlsx"
QtExcel"
//删除工作表(删除第一个)
QAxObject*first_sheet=work_sheets->
Item(int)"
first_sheet->
delete"
//插入工作表(插入至最后一行)
QAxObject*last_sheet=work_sheets->
sheet_count);
QAxObject*work_sheet=work_sheets->
Add(QVariant)"
last_sheet->
asVariant());
last_sheet->
Move(QVariant)"
work_sheet->
work_sheet->
setProperty("
QtSheet"
//设置工作表名称
//操作单元格(第2行第2列)
2,2);
cell->
JavaC++C#PHPPerlPythonDelphiRuby"
//设置单元格值
RowHeight"
50);
//设置单元格行高
ColumnWidth"
30);
//设置单元格列宽
HorizontalAlignment"
-4108);
//左对齐(xlLeft):
-4131
居中(xlCenter):
-4108
右对齐(xlRight):
-4152
VerticalAlignment"
//上对齐(xlTop)-4160居中(xlCenter):
下对齐(xlBottom):
-4107
WrapText"
//内容过多,自动换行
//cell->
ClearContents()"
//清空单元格内容
QAxObject*interior=cell->
Interior"
interior->
Color"
QColor(0,255,0));
//设置单元格背景色(绿色)
QAxObject*border=cell->
Borders"
border->
QColor(0,0,255));
//设置单元格边框色(蓝色)
QAxObject*font=cell->
Font"
//获取单元格字体
font->
QStringLiteral("
华文彩云"
//设置单元格字体
Bold"
//设置单元格字体加粗
Size"
20);
//设置单元格字体大小
Italic"
//设置单元格字体斜体
Underline"
2);
//设置单元格下划线
QColor(255,0,0));
//设置单元格字体颜色(红色)
//设置单元格内容,并合并单元格(第5行第3列-第8行第5列)
QAxObject*cell_5_6=work_sheet->
5,3);
cell_5_6->
Java"
QAxObject*cell_8_5=work_sheet->
8,5);
cell_8_5->
C++"
QStringmerge_cell;
merge_cell.append(QChar(3-1+'
A'
//初始列
merge_cell.append(QString:
number(5));
//初始行
merge_cell.append("
merge_cell.append(QChar(5-1+'
//终止列
number(8));
//终止行
QAxObject*merge_range=work_sheet->
Range(constQString&
merge_cell);
merge_range->
MergeCells"
//合并单元格
//merge_range->
false);
//拆分单元格
//work_book->
Save()"
//保存文件(为了对比test与下面的test2文件,这里不做保存操作)work_book->
SaveAs(constQString&
\\test2.xlsx"
//另存为另一个文件
work_book->
Close(Boolean)"
//关闭文件
excel.dynamicCall("
Quit(void)"
//退出
操作前:
操作后:
到这里很多人也许都在纳闷,单元格的宏怎么获取的?
比如对齐方式(居中对齐),为什么值是-4108,而不是其他值呢?
当然那不是我随便写的,自己可以录制宏,然后跟踪。
看下图:
如上所讲,已经基本可以满足常用的操作,如有更多专业需求,请参考ExcelVBA...
∙ExcelObjectModelReference.
最近写程序中需要将数据输出保存到Excel文件中。
翻看《C++GUIProgrammingwithQt4》(SecondEdition)发现可以在Qt中运用ActiveX控件,这真是太好了。
看了很久教程也没有学会,毕竟是新手,平时也没学过ActiveX编程。
一些在VB中可以方便使用的函数在Qt中都没法儿运行。
网上的方法也很多解决不了问题,还会报错。
也许是版本问题吧,Qt都更新了好几次了。
所以只好自己多试几次。
经过摸索我的方法如下:
首先在.pro文件中添加CONFIG+=qaxcontainer
接着程序实现
[cpp]
viewplaincopy
1.QString
filepath=QFileDialog:
getSaveFileName(this,tr("
Save
orbit"
),"
."
tr("
Microsoft
Office
2007
(*.xlsx)"
//获取保存路径
2.
if(!
filepath.isEmpty()){
3.
*excel
=
new
QAxObject(this);
4.
excel->
setControl("
//连接Excel控件
5.
SetVisible
(bool
Visible)"
"
false"
//不显示窗体
6.
DisplayAlerts"
false);
//不显示任何警告信息。
如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示
7.
8.
*workbooks
//获取工作簿集合
9.
workbooks->
Add"
//新建一个工作簿
10.
*workbook
//获取当前工作簿
11.
*worksheets
workbook->
//获取工作表集合
12.
*worksheet
worksheets->
1);
//获取工作表集合的工作表1,即sheet1
13.
*cellX,*cellY;
14.
for(int
i=0;
i<
curRow;
i++){
15.
QString
X="
A"
+QString:
number(i+1);
//设置要操作的单元格,如A1
16.
Y="
B"
17.
cellX
worksheet->
Range(QVariant,
QVariant)"
X);
//获取单元格
18.
cellY
Y);
19.
cellX->
SetValue(const
QVariant&
QVariant(ui->
tableWidget->
formula(i,0).toInt()));
//设置单元格的值
20.
cellY->
formula(i,1).toInt()));
21.
}
22.
23.
SaveAs(const
QString&
QDir:
toNativeSeparators(filepath));
//保存至filepath,注意一定要用QDir:
toNativeSeparators将路径中的"
/"
转换为"
\"
,不然一定保存不了。
24.
Close()"
//关闭工作簿
25.
Quit()"
//关闭excel
26.
delete
excel;
27.
excel=NULL;
28.
另外附上在网上搜到的一些常用操作:
QAxWidgetexcel("
1)显示当前窗口:
2)更改Excel标题栏:
InvokeMicrosoftExcel"
3)添加新工作簿:
QAxObject*workbooks=excel.querySubObject("
4)打开已存在的工作簿:
c:
/test.xls"
5)获取活动工作簿:
QAxObject*workbook=excel.querySubObject("
6)获取所有的工作表:
QAxObject*worksheets=workbook->
WorkSheets"
7)获取工作表数量:
intintCount=worksheets->
8)获取第一个工作表:
QAxObject*worksheet=workbook->
Worksheets(int)"
9)获取cell的值:
QAxObject*range=worksheet->
1,1);
以上操作不一定每个都可用(都好用),仅作为参考吧。
起码我第9)个就没成功,不知为何?
后来我改用了Range(QVariant,QVariant)的方法来替代它。
最后附上我用QAxBase:
generateDocumentation()方法获得的对应于Excel.Application的带Qt数据类型的QAxObject或者QAxWidget中可用的属性、信号和槽列表(虽然我还不大会用,不过参考下还是很好的):
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Qt Excel 操作