首页 > 其他分享 >qxlsx 冻结单元格(freeze fix)

qxlsx 冻结单元格(freeze fix)

时间:2024-07-17 11:08:42浏览次数:13  
标签:qxlsx xlsx int fix 单元格 write header QXlsx row

在使用qxlsx过程中,导出的Excel要求有行列冻结功能(https://github.com/QtExcel/QXlsx)。没找到库中代码有此功能,后来在讨论组组中,发现了一个大神把这个问题解决了(https://github.com/QtExcel/QXlsx/discussions/200)。

在此记录一下。

吧QXlsx库的源代码及更改上传到此:https://files-cdn.cnblogs.com/files/warmlight/QXlsx20240717.zip?t=1721185247&download=true

示例使用的是官方例子rowcolumn.cpp:

// rowcolumn.cpp

#include "xlsxdocument.h"
#include "xlsxformat.h"

#include <QtCore>
#include <QtGlobal>
#include "xlsxabstractsheet.h"

int rowcolumn()
{
    QXlsx::Document xlsx;
    xlsx.write(1, 2, "Row:0, Col:2 ==> (C1)");

    // Set the height of the first row to 50.0(points)
    xlsx.setRowHeight(1, 50.0);

    // Set the width of the third column to 40.0(chars)
    xlsx.setColumnWidth(3, 3, 40.0);

    // Set style for the row 11th.
    QXlsx::Format format1;
    format1.setFontBold(true);
    format1.setFontColor(QColor(Qt::blue));
    format1.setFontSize(20);
    xlsx.write(11, 1, "Hello Row Style");
    xlsx.write(11, 6, "Blue Color");
    xlsx.setRowFormat(11, format1);
    xlsx.setRowHeight(11, 41);

    // Set style for the col [9th, 16th)
    QXlsx::Format format2;
    format2.setFontBold(true);
    format2.setFontColor(QColor(Qt::magenta));
    for (int row = 12; row <= 30; row++)
        for (int col = 9; col <= 15; col++)
            xlsx.write(row, col, row + col);
    xlsx.setColumnWidth(9, 16, 5.0);
    xlsx.setColumnFormat(9, 16, format2);

    //20240717
    QXlsx::Worksheet* pSheet = static_cast<QXlsx::Worksheet*>(xlsx.currentSheet());
    pSheet->setFrozenRows(1);
    //pSheet->setFrozenColumns(1);

    // Autosize columns
    xlsx.addSheet("Autosize");
    QXlsx::Format header;
    header.setFontBold(true);
    header.setFontSize(20);

    // Custom number formats
    int row = 2;
    xlsx.write(row, 1, "Small", header);
    xlsx.write(row, 2, "Large header", header);
    for (int i = 0; i < 10; ++i) {
        xlsx.write(row + 1 + i, 1, i);
        xlsx.write(row + 1 + i, 2, i);
    }
    xlsx.autosizeColumnWidth(1, 2);

    xlsx.write(2, 4, "Small", header);
    xlsx.write(2, 5, "<--- Large header --->", header);
    for (int i = 0; i < 10; ++i) {
        xlsx.write(row + 1 + i, 4, exp(i));
        xlsx.write(row + 1 + i, 5, exp(i));
    }
    xlsx.autosizeColumnWidth(4, 5);

    xlsx.write(1, 7, "<--- Very big first line --->", header);
    xlsx.write(row, 7, "Small", header);
    xlsx.write(row, 8, "<--- Large header --->", header);
    for (int i = 0; i < 10; ++i) {
        xlsx.write(row + 1 + i, 7, exp(i));
        xlsx.write(row + 1 + i, 8, exp(i));
    }
    xlsx.autosizeColumnWidth(QXlsx::CellRange(2, 7, 1000, 8));

    //20240717
    QXlsx::Worksheet* pSheet1 = static_cast<QXlsx::Worksheet*>(xlsx.currentSheet());
    pSheet1->setFrozenRows(2);
    pSheet1->setFrozenColumns(1);

    xlsx.saveAs("rowcolumn.xlsx");
    return 0;
}

 

标签:qxlsx,xlsx,int,fix,单元格,write,header,QXlsx,row
From: https://www.cnblogs.com/warmlight/p/18306883

相关文章

  • WPS批量将图片嵌入单元格
    选中单张图片Ctrl+A全选右键选择图片嵌入单元格注意:它是将图片嵌入在图片左上角所在的单元格内,需要确保每个被嵌入的单元格只有一个图片的左上角在其内部,否则会出现“一个单元格内不能插入多个图片的”的报错......
  • CF1988C Increasing Sequence with Fixed OR Solution
    题意简述如下:给定一个正整数\(n\),请构造一个正整数序列使其满足以下条件并尽可能长:这个序列中每个数都大于等于\(1\)且小于等于\(n\);这个序列是单调递增的;这个序列中任意两个相邻的数按位或的结果都为\(n\)。通过手玩或者写个最长上升子序列可以发现,我们记这个数在二进制......
  • 采购订单列表根据多条件设置单元格背景色
    文章目录采购订单列表根据多条件设置单元格背景色BOS配置空字符串需要单独处理测试采购订单列表根据多条件设置单元格背景色BOS配置空字符串需要单独处理如果值存在空字符串和空格,空格会标红,为空不会。因此单独针对空字符串标红。测试......
  • excel单元格设置为文本为何还要双击
    excel单元格设置为文本时为何还要双击才有效?我选定一行,用右键设置为文本,为何还要单个逐一双击才有效,否则选定求和时(包含其中一个单元格),仍视为数值。而逐一双击太麻烦,怎么解决?因为这是excel默认设置,如想要不单个操作,可使用分列的方式来批量处理。具体操作方式如下:1、以Excel201......
  • winform窗体DataGridView合并单元格处理
    文本是使用SunnyUI的UIDataGridView控件进行演示的,同样适用于System.Windows.Forms.DataGridView控件具体需求如下,下表是个成绩表,其中姓名、总分、平均分这三列信息重复,需要对数据表进行合并单元格处理。 实现该需求需要两个步骤:1.给表格添加单元格重绘事件 在方法uiDataG......
  • Excel原地跳转单元格
    Excel原地跳转单元格效果:结束编辑状态,并且活动单元格停留在刚才编辑单元格的位置实现:(两种方法)       (1)输入结束后按Ctrl+Enter。       (2)输入结束后点击编辑栏中的√。......
  • CSS【详解】定位 position (静态定位 static -- 文档流排布 、相对定位 relative、绝对
    静态定位position:static【默认】此时,元素按文档流的方式排布:以左上角为起点内联元素从左到右依次排布,当一行排不下时,自动换到下一行继续从左到右排布块级元素独占一行此时,top、left、right、bottom、z-index等样式无效。相对定位position:relative相对......
  • EasyExcel 单元格根据图片数量动态设置宽度
    在使用EasyExcel导出Excel时,如果某个单元格是图片内容,且存在多张图片,此时就需要单元格根据图片数量动态设置宽度。经过自己的研究和实验,导出效果如下:具体代码如下:EasyExcel版本<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactI......
  • git新建分支的时候,使用fix/bug_123好还是fix_bug_123?
    在Git中创建分支时,选择分支名称的命名规范非常重要,因为它不仅有助于代码审查和协作,还能提高项目管理和追踪问题的效率。在给定的两个选项之间选择,fix/bug_123和fix_bug_123,通常推荐使用带有斜杠/的风格,即fix/bug_123,原因如下:语义清晰:使用/分隔符可以清楚地区分分支的......
  • 关于conftest和fixtures
    一、conftest.py文件作用:存放case的前提条件和后置条件配置函数;一般该类函数都会使用fixture装饰(fixture该篇第二点会介绍);使用conftest里面的函数时不需要导入conftest.py这个文件。只需将函数名作为变量传入test_case即可调用;使用conftest.py的规则:特点:conftest......