Flexcel学习笔记

1.引用的单元

FlexCel.Core

始终需要使用的一个单元。

多系统运行时。{$IFDEF LINUX}SKIA.FlexCel.Core{$ELSE}{$IFDEF FIREMONKEY}FMX.FlexCel.Core{ $ELSE}VCL.FlexCel.Core{$ENDIF}{$ENDIF}

FlexCel.XlsAdapter这是FlexCel的xls/x引擎。如果您正在处理xls或xlsx文件,则需要使用此单元。很少有情况您不需要使用这个单元
FlexCel.Render这是FlexCel渲染引擎,它可以将xls/x文件中的内容转换成图像、PDF、HTML或其他类似格式的文件。当你想要将一个xls/x文件导出为不同格式时,你需要使用FlexCel.Render
FlexCel.Pdf 这是 FlexCel PDF 引擎。请注意,这是一个通用的 PDF 引擎,与 xls/x 文件无关。如果您直接与 PDF 引擎打交道,或者通常处理 PDF 文件,则需要使用 FlexCel.Pdf
FlexCel.Report 这是FlexCel报告引擎。如果您正在使用TFlexCelReport类进行Excel报告,则需要使用此单元。

2.创建一个使用代码的Excel文件 

uses... System.IOUtils, VCL.FlexCel.Core, FlexCel.XlsAdapter;procedure CreateExcelFile;
var xls: TXlsFile;
begin 
//Create a new empty Excel file, with default formatting as if it was createdby Excel 2019. //Different Excel versions can have different formatting when they create 
//an empty file, so for example 
//Excel 2003 will have a default font of Arial, and 2019 will use Calibri. 
//This format is anyway the starting format, you can change it all later. 
xls := TXlsFile.Create(1, TExcelFileFormat.v2019, true); 
try 
//Enters a string into A1 
xls.SetCellValue(1, 1, 'Hello from FlexCel!'); 
//Enters a number into A2. //Note that xls.SetCellValue(2, 1, '7') would enter a string. 
xls.SetCellValue(2, 1, 7); //Enter another floating point number. 
//All numbers in Excel are floating point, 
//so even if you enter an integer, it will be stored as double. 
xls.SetCellValue(3, 1, 11.3); 
//Enters a formula into A4. 
xls.SetCellValue(4, 1, TFormula.Create('=Sum(A2:A3)')); 
//Saves the file to the "Documents" folder. xls.Save(TPath.Combine(TPath.GetDocumentsPath, 'test.xlsx'));
finally 
xls.Free; 
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin 
CreateExcelFile;
end;

3.读取一个文件 

procedure ReadExcelFile(const aMemo: TMemo);
varxls: TXlsFile;row, colIndex: integer;XF: integer;cell: TCellValue;addr: TCellAddress;s: string;
beginxls := TXlsFile.Create(TPath.Combine(TPath.GetDocumentsPath, 'test.xlsx'));tryxls.ActiveSheetByName := 'Sheet1'; //we'll read sheet1. We could loop over
the existing sheets by using xls.SheetCount and xls.ActiveSheetfor row := 1 to xls.RowCount dobeginfor colIndex := 1 to xls.ColCountInRow(row) do //Don't use xls.ColCount as
it is slow: See https://doc.tmssoftware.com/flexcel/vcl/guides/performanceguide.html#avoid-calling-colcountbeginXF := -1;cell := xls.GetCellValueIndexed(row, colIndex, XF);addr := TCellAddress.Create(row, xls.ColFromIndex(row, colIndex));s := ('Cell ' + addr.CellRef + ' ');if (cell.IsEmpty) then s := s + 'is empty.'else if (cell.IsString) then s := s + 'has a string: ' + cell.ToStringelse if (cell.IsNumber) then s := s + 'has a number: ' +
FloatToStr(cell.AsNumber)else if (cell.IsBoolean) then s := s + 'has a boolean: ' +
BoolToStr(cell.AsBoolean)else if (cell.IsError) then s := s + 'has an error: ' + cell.ToStringelse if (cell.IsFormula) then s := s + 'has a formula: ' +
cell.AsFormula.Textelse s := s + ('Error: Unknown cell type');aMemo.Lines.Add(s);end;end;finallyxls.Free;end;
end;
procedure TForm1.Button2Click(Sender: TObject);
beginReadExcelFile(Memo1);
end;

4.操作文件 

TElExcellFile.InsertAndCopyRange方法来插入行、列或单元格范围。同样也适用于复制单元格范围、单元格、整行或整列。或者在单个操作中插入和复制单元格/列/行(就像在Excel中按下“复制/粘贴已复制的单元格”一样)。它还可以从一个工作表复制单元格到同一个工作表、另一个工作表,甚至是另一个文件中的工作表。

使用TElExcellFile.DeleteRange来删除单元格范围、整行或整列。

将文件保存为“报告.模板.xlsx”在“文档”文件夹中

创建一个新的控制台应用程序,将其保存为“CustomerReport”,并粘贴以下代码:

使用TElExcellFile.MoveRange来移动一个范围、整行或整列从一个位置到另一个位置。

使用TElExcelFile.DeleteSheet来删除一个工作表。

5.创建报告

1.,取表字段值<#Table.FieldName>如<#Customer.Name>

2.列表时要设置步骤如下:“公式”选项卡“->"名称管理器"(Excel2003中菜单,插入,名称,定义)

3.创建一个Customer指向="sheet1!$A$1",该名称不分大小写。它需要以二个下划线(“__”)并以二个下划线结束("__").

6.文件导出为PDF

uses ..., VCL.FlexCel.Core, FlexCel.XlsAdapter, FlexCel.Render;...
procedure ExportToPdf(const InFile, OutFile: string);
var 
xls: TXlsFile; 
pdf: TFlexCelPdfExport;
begin xls := TXlsFile.Create(InFile); 
try 
pdf := TFlexCelPdfExport.Create(xls, true); 
try pdf.Export(OutFile); 
finally 
pdf.Free; 
end; 
finally 
xls.Free; 
end;
end;

7.导出Html

uses ..., VCL.FlexCel.Core, FlexCel.XlsAdapter, FlexCel.Render;...procedure ExportToHtml(const InFile, OutFile: string);
var 
xls: TXlsFile; 
html: TFlexCelHtmlExport;
begin xls := TXlsFile.Create(InFile); 
try 
html := TFlexCelHtmlExport.Create(xls, true); 
try 
html.Export(OutFile, ''); 
finally 
html.Free; 
end; 
finally 
xls.Free; 
end;
end;

二、开发指南。

1.数组和单元格

为了保持与Excel OLE自动化兼容的语法,大多数FlexCel索引/数组都是从1开始的。

2。单元格格式(*单元格格式->行格式->列格式)

3.日期单元格(TExcelFile.GetCellValue 将返回一个 TCellValue 记录,而 TCellValue 有一个 ValueType,它可以 是类型 TCellValueType.DateTime。)

三、开始使用FlexCel

为了使用FlexCel,首先要做的是在uses子句中添加FlexCel。有8个单元你可以使用:VCL.FlexCel.Core、FMX.FlexCel.Core、SKIA.FlexCel.Core、FlexCel.Core、FlexCel.XlsAdapter、FlexCel.Render、FlexCel.Pdf和FlexCel.Report。

FlexCel.Core 是平台无关的,因此使用它的单元将在 FireMonkey、VCL 和 Linux 中工作。

1.打开与保存

默认情况下,FlexCel不会覆盖已存在的文件。因此,在保存之前,您总是必须调用File.Delete方法,或者设置TExcelFile.AllowOverWritingFiles属性为true。在这个例子中,我们在创建对象的行中设置了AllowOverWritingFiles = true:xls := TXlsFile.Create(true)。

2插入、复制和移动单元格/行/列以及工作表

InsertAndCopySheets:插入和/或复制一个工作表。使用此方法来添加一个新的空工作表。

DeleteSheet:从文件中删除多张工作表。

ClearSheet:清除工作表中的所有内容,但保留其位置。

3.自动调整行和列

如果你使用的是XlsFile,你可以使用XlsFile.Autofit…方法来完成这个操作。如果你使用的是FlexCelReport,可以使用<#Row Height(Autofit)>和<#Column Width(Autofit)>标签来自动调整你想要的行或列。

4.自动调整合并单元格

FlexCel默认会使用合并单元格的最后一行的自动调整功能,因为在我们的经验中,这通常是您所需要的。但是,您可以通过在调用“Autofit”方法时更改参数“autofitMerged”来改变这种行为,或者,如果您正在使用报表,可以使用<#Autofit settings>标签来实现这一点。

5.智能分页

您需要通过调用TExcelFile.KeepRowsTogether或TExcelFile.KeepColsTogether来指定您希望保持在一起的行或列,一旦您完成创建文件后,调用TExcelFile.AutoPageBreaks对整个文档进行分页,并在尽可能保持行和列在一起的情况下创建分页符。

6.寡妇/孤儿问题

在这个例子中,第4页几乎是空的,因为上面只有当前组的两行数据,下一组从下一页开始。

当一页上写的字很少时,你通常会希望在同一页开始下一组内容,而不是留下一张空白的纸。

您可以在调用AutoPageBreaks时使用FlexCel中的“PercentOfUsedSheet”参数来控制这一点。PercentOfUsedSheet的默认值为20,这意味着为了添加分页符,页面必须至少填充20%。

在上面的示例中,不会在第四页进行分页,因为该页的20%尚未使用,因此下一组也将从第4页开始。如果您将“PercentOfUsedSheet”参数设置为0%,则不会有孤儿控制,下一组将在第5页开始,无论第4页是否只有一行。

将“PercentOfUsedSheet”设置为100%意味着完全不控制孤行和寡列,因为要设置分页符,必须使用页面100%的空间,所以FlexCel没有添加分页符的余地。它无法在页面100%之前设置分页符,因此所有分页符都将设置在最后一行,也无法保持任何行在一起。建议您将“PercentOfUsedSheet”参数保持在约20%左右。

7.不同的打印机问题

稍微减少页面高度可能会导致最后一行的内容无法在该页面上打印出来,而是被打印在下一页上。由于FlexCel在那一行之后自动添加了一个分页符(以便正确地根据它用于计算的30厘米进行分页),最终你得到的是一页只有一个单元格的空白页。

为了解决这个问题,AutoPageBreaks 的第二个参数是 FlexCel 将用于计算分页的页面百分比。它的默认值是 95%,这意味着它将一个 30 厘米高的页面视为 30*0.95=28.5 厘米,并据此为该工作表计算分页。

8.调试智能分页

我们希望每个十年都保持在各自页面上,如果做不到,至少保持每张完整的专辑在一起。为此,我们可以定义以下保持在一起的区间:

第1至15行,第一级第16至22行,第一级第2至8行,第二级第9至15行,第二级第17至22行,第二级

当然,上面的代码并不是您在正常使用中设置智能分页符的方式。在实际代码中,您将使用某种循环,或者插入和复制行,或者在报告中设置保持在一起的区域。但是一旦完成,效果类似于手动调用TExcelFile.KeepRowsTogether并传递上述值。

xls.KeepRowsTogether(1, 15, 1, false); 将第1行和第15行之间的所有行作为一个单元格进行处理。xls.KeepRowsTogether(16, 22, 1, false); 将第16行和第22行之间的所有行作为一个单元格进行处理。xls.KeepRowsTogether(2, 8, 2, false); 将第2行和第8行之间的所有行作为一个单元格

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/44777.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建邮局服务器的配置步骤?如何管理协议?

搭建邮局服务器需要考虑的安全措施&#xff1f;怎么搭建服务器&#xff1f; 在现代互联网环境中&#xff0c;电子邮件是重要的沟通工具。为了保证信息传递的稳定性和安全性&#xff0c;许多企业选择自行搭建邮局服务器。AokSend将详细介绍搭建邮局服务器的配置步骤&#xff0c…

parquet介绍

概述 Apache Parquet 是一种开源的列式数据文件格式&#xff0c;旨在实现高效的数据存储和检索。它提供高性能压缩和编码方案(encoding schemes)来批量处理复杂数据&#xff0c;并且受到许多编程语言和分析工具的支持。 parquet-format parquet-format 存储库托管 Apache Pa…

如何配置yolov10环境?

本文介绍如何快速搭建起yolov10环境&#xff0c;用于后续项目推理、模型训练。教程适用win、linux系统 yolo10是基于yolo8&#xff08;ultralytics&#xff09;的改进&#xff0c;环境配置跟yolo8几乎一模一样。 目录 第1章节&#xff1a;创建虚拟环境 第2章节&#xff1a;…

Tita的OKR:最新20个HR人力资源OKR案例

OKR是一个目标设定框架&#xff0c;可以提高员工的参与度&#xff0c;同时帮助人们专注于最重要的事情。 然而&#xff0c;OKR最大的挑战之一是设定正确的目标&#xff0c;我与很多人力资源专业人士交谈过&#xff0c;他们证明他们的OKR并不完美。 这就是为什么我们收集了最佳…

水文:CBA业务架构师

首先&#xff0c; 我们来了解一下什么是CBA业务架构师&#xff1f; CBA业务架构师认证是由业务架构师公会(Business Architecture Guild)授予的一种专业认证。标志着证书持有者已经掌握了业务架构的核心技能和知识&#xff0c;能够在实际工作中熟练运用业务架构技术和框架&…

Jetson-AGX-Orin 安装ROS2

Jetson-AGX-Orin 安装ROS2 确保Orin能够上网 1、安装依赖 sudo apt update sudo apt install curl gnupg2 lsb-release2、添加源 sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpgecho &q…

【C++课程学习】:new和delete为什么要配套使用,new,delete和malloc,free的比较

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f3a1;1.new&#xff0c;delete和malloc&#xff0c;free的区别&#xff1a; ⌚️相同点&…

“删错文件后如何高效挽救?两大恢复策略全解析“

在数字化日益深入生活的今天&#xff0c;数据已成为我们工作、学习和娱乐不可或缺的一部分。然而&#xff0c;删错文件的经历却如同数字世界中的一场“小插曲”&#xff0c;不经意间就可能让我们陷入数据丢失的困境。无论是误触删除键、清空回收站&#xff0c;还是软件故障导致…

数据结构(其一)--基础知识篇

目录 1. 数据结构三要素 1.1 数据结构的运算 1.2 数据结构的存储结构 2. 数据类型&#xff0c;抽象数据类型 3. 算法 3.1 时间复杂度T(n) 3.2 空间复杂度 1. 数据结构三要素 1.1 数据结构的运算 即&#xff0c;增删改查 1.2 数据结构的存储结构 2. 数据类型&#xff0…

视觉语言模型导论:这篇论文能成为你进军VLM的第一步

近些年&#xff0c;语言建模领域进展非凡。Llama 或 ChatGPT 等许多大型语言模型&#xff08;LLM&#xff09;有能力解决多种不同的任务&#xff0c;它们也正在成为越来越常用的工具。 这些模型之前基本都局限于文本输入&#xff0c;但现在也正在具备处理视觉输入的能力。如果…

录屏软件免费推荐,拥有这4款,不花一分钱

在这个充满创意与活力的数字时代&#xff0c;录屏软件早已成为我们探索世界、分享生活的必备神器。但市面上却存在很多收费的录屏软件&#xff0c;让人望而却步。那么有没有一些录屏软件免费帮助我们轻松开启录影人生&#xff0c;尽情展现创意与才华呢&#xff1f; 本文就将带…

痉挛性斜颈是中医治疗好还是西医好呢?你有真正了解吗?

痉挛性斜颈是西医治疗好还是中医治疗好 痉挛性斜颈&#xff0c;是由于中枢神经系统异常冲动引起的颈部肌群阵发性不自主收缩&#xff0c;使头颈向一侧扭转或痉挛性倾斜。 痉挛性斜颈的病因&#xff0c;多数是由于脑深部的神经细胞病变引起的。这些病人可以有脑炎、出生时窒…

光电门验证动量守恒实验

本实验所需器件与第二个实验相同。但是连线方式有所区别&#xff0c;先将Arduino的电源输出接到两个光电门&#xff0c;然后再将光电门1的信号输出线接到Arduino的第10个端口&#xff0c;光电门2的信号输出线接到Arduino的第11个端口。对Arduino写入下列程序&#xff08;只有主…

【GreenHills】GHS-Servecode的查看和说明

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 在Green Hills客户申请license试用以及正式文件的Servecode编号会有不同&#xff0c;该文档对此进行说明并如何主动查看Servecode&#xff0c;并且说明Servecode的类别&#xff0c;通过Servecode了解客户授权情况。 …

【机器学习】初学者经典案例(随记)

&#x1f388;边走、边悟&#x1f388;迟早会好 一、概念 机器学习是一种利用数据来改进模型性能的计算方法&#xff0c;属于人工智能的一个分支。它旨在让计算机系统通过经验自动改进&#xff0c;而不需要明确编程。 类型 监督学习&#xff1a;使用带标签的数据进行训练&…

2-30 基于matlab的神经网路下身份证号码识别算法

基于matlab的神经网路下身份证号码识别算法&#xff0c;二值化、膨胀处理、边界区域划分、身份证字符分割&#xff0c;字符识别算法&#xff0c;输出识别结果。并保存识别结果。程序已调通&#xff0c;可直接运行。 2-30 神经网络 身份证识别 图像处理 - 小红书 (xiaohongshu.c…

FastAPI 学习之路(四十)后台任务

我们在实际的开发中&#xff0c;都会遇到&#xff0c;我们要执行的一些任务很耗时&#xff0c;但是对于前端&#xff0c;没必要进行等待。比如发送邮件&#xff0c;读取文件。我们在fastapi如何实现呢。 其实很简单&#xff0c;fastapi已经给我们封装好一个现成的模块&#xff…

4款免费国产开源软件,功能过于强大,常被认为是外国人开发

之前小编分享了一些良心的电脑软件&#xff0c;大部分都是国外的开源软件&#xff0c;就有部分同学在后台说小编有点极端了&#xff0c;国内也是有良心的电脑软件的。 本期就是国产软件专场&#xff0c;今天就给大家推荐几款良心的国产电脑软件&#xff0c;说真的&#xff0c;…

UNIAPP_ReferenceError: TextEncoder is not defined 解决

错误信息 1、安装text-decoding npm install text-decoding2、main.js import { TextEncoder, TextDecoder } from text-decoding global.TextEncoder TextEncoder global.TextDecoder TextDecoder

ENSP防火墙综合配置

综合拓扑&#xff1a; 实验要求&#xff1a; 要求一 生产区的安全策略配置 办公区的安全策略 要求二 生产区的安全策略 游客和办公区的安全策略 因为ISP返回的数据包会被防火墙最后的默认安全策略给拒绝&#xff0c;所以&#xff0c;把要ISP返回的数据给允许通过 要求三 增加…