
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对话框标题字体等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)