如何使用Qt来 *** 作Excel

如何使用Qt来 *** 作Excel,第1张

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

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

2Excel读取

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

主要读取内容:

标题

工作表数目

工作表名称

起始行

起始列

行数

列数

单元格内容

代码如下:

QAxObject excel("ExcelApplication");

excelsetProperty("Visible", true);

QAxObject work_books = excelquerySubObject("WorkBooks");

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

QVariant title_value = excelproperty("Caption");  //获取标题

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

QAxObject work_book = excelquerySubObject("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效果如下:

4Excel增、删、改

主要 *** 作:

设置标题

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

设置工作表名称

删除工作表

设置单元格内容

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

设置单元格对齐方式

设置单元格高度、宽度

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

合并/拆分单元格

清空单元格

代码如下:

QAxObject excel("ExcelApplication");

excelsetProperty("Visible", true);

QAxObject work_books = excelquerySubObject("WorkBooks");

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

excelsetProperty("Caption", "Qt Excel");

QAxObject work_book = excelquerySubObject("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_cellappend(QChar(3 - 1 + 'A'));  //初始列

merge_cellappend(QString::number(5));  //初始行

merge_cellappend(":");

merge_cellappend(QChar(5 - 1 + 'A'));  //终止列

merge_cellappend(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:\\test2xlsx");   //另存为另一个文件

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

exceldynamicCall("Quit(void)");  //退出

5效果如下:

*** 作前:

*** 作后:

使用QFont的setPointSize,此时字体的大小会跟随DPI改变而改变。

使用QFont的setPixelSize,此时字体的大小不会随DPI的改变而发生变化。

通过设置PointSize的字体来说,字体大小是随着屏幕大小以及分辨率自适应的,无须处理字体的缩放;

通过设置PixelSize的字体来说,所占分辨率大小固定,在相同尺寸上更高分辨率的屏幕上,由于其单位长度内的像素点数更多,即像素密度更大,字体会看起来小一些

要处理这种情况,一种办法就是所有字体都用PointSize来表示大小,但对于已经采用PixelSize的字体来说,就要对其进行控制缩放。 

通过qss来实现:

PointSize:    font-size:16pt;

PixelSize:     font-size:16px;

先选择所要设置的字,点击“格式”菜单下的“单元格”,在出现的“单元格格式”对话框中选择“字体”项进行设置。也可选中所要设置的字后点击鼠标右键,选择设置“单元格格式”在出现的对话框中进行设置。

QtLineSeries字体大小可以通过Qt的QFont类来设置。QFont类提供了一系列的方法来设置字体大小,如setPointSize()、setPixelSize()等。您可以根据自己的需求来设置字体大小,以达到最佳的显示效果。

以上就是关于如何使用Qt来 *** 作Excel全部的内容,包括:如何使用Qt来 *** 作Excel、Qt的pointSize和pixelSize,qt字体大小自适应、如何设置qt对话框标题字体等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9690644.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存