ExcelFile/ExcelFile.tsf

1625 lines
44 KiB
Plaintext
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Type ExcelFile = Class
/// Version: V1.0 2022-01-10
/// 适用于 Microsoft Excel? 2007 及以上版本创建的电子表格文档。支持 XLSX / XLSM / XLTM / XLTX 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档。
/// windows: plugin\TSXlsx_plugin.dll、tsxlsx.dll
/// linux: plugin/libtsxlsx_plugin.so、libTsXlsx.so
/// ExcelFile所有类方法返回值:
/// [err, v] := f.SetActiveSheet();
/// if err then
/// Println("ErrorNo={}, ErrorMsg={}", err, v)
/// else
/// Println("return value={}", v);
///
/// ExcelFile底层基于Excelize
/// Excelize是 Go 语言编写的用于操作 Office Excel 文档基础库
/// https://xuri.me/excelize/zh-hans/
fh_; //文件句柄
///缺省构造函数
Function Create(); overload;
Begin
End;
///构造函数打开已经存在的excel文件
///alias: string文件目录别名
///fname: string文件名
///[opt]: string参数同OpenFile
Function Create(alias, fname, opt); overload;
Begin
OpenFile(alias, fname, opt);
End;
///析构函数
Function Destory();
Begin
xlsx_call("Close",fh_);
End;
///打开已经存在的excel文件
///alias: string文件目录别名
///fname: string文件名
///[opt]: string可选参数打开、创建文件optionjson字符串
///定义输入、输出字符集默认GBKexcel文件是否需要密码打开
///eg. opt := '{"in":"utf8","out":"utf8","password":"******"}';
///返回: [err, info]
Function OpenFile(alias, fname, opt);
Begin
if not ifstring(opt) or opt="" then opt := "{}";
[err, fh, n] := xlsx_call("OpenFile", alias, fname, opt);
if err then
PrintLn("OpenFile fail: {}, fname: {}", fh, n)
else
fh_ := fh;
println("fh={}",fh);
return array(err, fh);
End;
///创建新xlsx文件
///[opt]: string参数同openfileNewFile方法不支持password加密文件
///返回: [err, info]
Function NewFile(opt);
Begin
[err, fh_] := xlsx_call("NewFile", opt);
return array(err, fh_);
End;
///保存文件
///返回: [err, info]
Function Save();
Begin
return xlsx_call("Save", fh_);
End;
///另存为
///alias: string文件目录别名
///fname: string文件名
///返回: [err, info]
Function SaveAs(alias, fname);
Begin
return xlsx_call("SaveAs", fh_, alias, fname);
End;
///创建新sheet
///sheet: string工作表名称
///返回: [err, info]
Function NewSheet(sheet);
Begin
return xlsx_call("NewSheet", fh_, sheet);
End;
///删除sheet
///sheet: string工作表名称
///返回: [err, info]
Function DeleteSheet(sheet);
Begin
return xlsx_call("DeleteSheet", fh_, sheet);
End;
///复制sheet
///from_sheet: int工作表序号
///to_sheet: int工作表序号
///返回: [err, info]
Function CopySheet(from_sheet, to_sheet);
Begin
return xlsx_call("CopySheet", fh_, from_sheet, to_sheet);
End;
///工作表分组
///sheets: json字符串sheet数组
///eg. sheets := '["sheet1","sheet2"]';
///返回: [err, info]
Function GroupSheets(sheets);
Begin
return xlsx_call("GroupSheets", fh_, sheets);
End;
///取消工作表分组
///sheets: json字符串sheet数组
///eg. sheets := '["sheet1","sheet2"]';
///返回: [err, info]
Function UnGroupSheets(sheets);
Begin
return xlsx_call("UnGroupSheets", fh_, sheets);
End;
///设置工作表背景图片
///pictrue: string图片文件路径
///返回: [err, info]
Function SetSheetBackground(sheet, pictrue);
Begin
return xlsx_call("SetSheetBackground", fh_, sheet, pictrue);
End;
///设置默认(活动)工作表
///index: 整数, 工作表索引 >= 0
///返回: [err, info]
Function SetActiveSheet(index);
Begin
return xlsx_call("SetActiveSheet", fh_, index);
End;
///获取默认(活动)工作表索引
///返回: [err, index:int]
Function GetActiveSheet();
Begin
return xlsx_call("GetActiveSheet", fh_);
End;
///设置工作表可见性
///sheet: string工作表名称
///visible: bool
///返回: [err, info]
Function SetSheetVisible(sheet, visible);
Begin
return xlsx_call("SetSheetVisible", fh_, sheet, visible);
End;
///获取工作表可见性
///sheet: string工作表名称
///返回: [err, visible:int]
Function GetSheetVisible(sheet);
Begin
return xlsx_call("GetSheetVisible", fh_, sheet);
End;
///设置工作表格式属性
///sheet: string工作表名称
///opts: stringjson字符串表格属性:
/// BaseColWidth int
/// DefaultColWidth double
/// DefaultRowHeight double
/// CustomHeight bool
/// ZeroHeight bool
/// ThickTop bool
/// ThickBottom bool
///eg. opts := '{"BaseColWidth":8,"DefaultColWidth":4.2,"ZeroHeight":true}';
///返回: [err, info]
Function SetSheetFormatPr(sheet, opts);
Begin
return xlsx_call("SetSheetFormatPr", fh_, sheet, opts);
End;
///获取工作表格式属性
///sheet: string工作表名称
///返回: [err, option:json]json字符串表格属性参考SetSheetFormatPr
Function GetSheetFormatPr(sheet);
Begin
return xlsx_call("GetSheetFormatPr", fh_, sheet);
End;
///设置工作表视图属性
///sheet: string工作表名称
///viewIndex: int视图索引viewIndex 可以是负数,如果是这样,则向后计数(-1 代表最后一个视图)
///opts: stringjson字符串工作表视图属性:
///
/// DefaultGridColor bool
/// RightToLeft bool
/// ShowFormulas bool
/// ShowGridLines bool
/// ShowRowColHeaders bool
/// ZoomScale double
/// TopLeftCell string
/// ShowZeros bool
///eg. opts := '{"DefaultGridColor":true,"DefaultGridColor":2.0,"TopLeftCell":"A4"}';
///返回: [err, info]
Function SetSheetViewOptions(sheet, viewIndex, opts);
Begin
return xlsx_call("SetSheetViewOptions", fh_, sheet, viewIndex, opts);
End;
///获取工作表视图属性
///sheet: string工作表名称
///viewindex: int视图索引viewIndex 可以是负数,如果是这样,则向后计数(-1 代表最后一个视图)
///返回: [err, option:json]json字符串表格属性参考SetSheetViewOptions
Function GetSheetViewOptions(sheet, viewIndex);
Begin
return xlsx_call("GetSheetViewOptions", fh_, sheet, viewIndex);
End;
///设置工作表页面布局
///sheet: string工作表名称
///opts: stringjson字符串页面布局参数:
/// BlackAndWhite bool //BlackAndWhite specified print black and white.
/// FirstPageNumber int //FirstPageNumber specified the first printed page number. If no value is specified, then 'automatic' is assumed.
/// PageLayoutOrientation string //PageLayoutOrientation defines the orientation of page layout for a worksheet.
/// PageLayoutPaperSize int //PageLayoutPaperSize defines the paper size of the worksheet.
/// FitToHeight int //FitToHeight specified the number of vertical pages to fit on.
/// FitToWidth int //FitToWidth specified the number of horizontal pages to fit on.
/// PageLayoutScale int //PageLayoutScale defines the print scaling. This attribute is restricted to values ranging from 10 (10%) to 400 (400%). This setting is overridden when fitToWidth and/or fitToHeight are in use.
///eg. opts := '{"BlackAndWhite":true,"FirstPageNumber":1,"PageLayoutScale":10}';
///返回: [err, info]
Function SetPageLayout(sheet, opts);
Begin
return xlsx_call("SetPageLayout", fh_, sheet, opts);
End;
///获取工作表页面布局
///sheet: string工作表名称
///返回: [err, option:json]json字符串表格属性参考SetPageLayout
Function GetPageLayout(sheet);
Begin
return xlsx_call("GetPageLayout", fh_, sheet);
End;
///设置工作表页边距
///sheet: string工作表名称
///opts: stringjson字符串页边距参数:
/// MarginBotom double
/// MarginFooter double
/// MarginHeader double
/// MarginLeft double
/// MarginRight double
/// MarginTop double
///eg. opts := '{"MarginBotom":4.2,"MarginLeft":1,"MarginTop":4.2}';
///返回: [err, info]
Function SetPageMargins(sheet, opts);
Begin
return xlsx_call("SetPageMargins", fh_, sheet, opts);
End;
///获取工作表页边距
///sheet: string工作表名称
///返回: [err, option:json]json字符串表格属性参考SetPageMargins
Function GetPageMargins(sheet);
Begin
return xlsx_call("GetPageMargins", fh_, sheet);
End;
///设置页眉和页脚
///sheet: string工作表名称
///opts: stringjson字符串页眉和页脚参数:
/// AlignWithMargins bool //设定页眉页脚页边距与页边距对齐
/// DifferentFirst bool //设定第一页页眉和页脚
/// DifferentOddEven bool //设定奇数和偶数页页眉和页脚
/// ScaleWithDoc bool //设定页眉和页脚跟随文档缩放
/// OddFooter string //奇数页页脚控制字符
/// OddHeader string //奇数页页眉控制字符
/// EvenFooter string //偶数页页脚控制字符
/// EvenHeader string //偶数页页眉控制字符
/// FirstFooter string //首页页脚控制字符
/// FirstHeader string //首页页眉控制字符
///eg. opts := '{"AlignWithMargins":true,"ScaleWithDoc":true,"EvenHeader":"&L&D&R&T"}';
///返回: [err, info]
Function SetHeaderFooter(sheet, opts);
Begin
return xlsx_call("SetHeaderFooter", fh_, sheet, opts);
End;
///设置名称,根据给定的名称和引用区域设置名称,默认范围是工作簿。
///opts: stringjson字符串参数:
/// Name string
/// Comment string
/// RefersTo string
/// Scope string
///eg. opts := '{"Name":"Amount","RefersTo":"Sheet1!$A$2:$D$5","Comment":"defined name comment","Scope":"Sheet2"}';
///返回: [err, info]
Function SetDefinedName(opts);
Begin
return xlsx_call("SetDefinedName", fh_, opts);
End;
///获取作用范围内的工作簿和工作表的名称列表
///返回: [err, definedname:json]json字符串所有名称列表参见SetDefinedName
Function GetDefinedName();
Begin
return xlsx_call("GetDefinedName", fh_);
End;
///删除名称,根据给定的名称和名称作用范围删除已定义的名称,默认名称的作用范围为工作簿。
///opts: stringjson字符串参见SetDefinedName
///返回: [err, info]
Function DeleteDefinedName(opts);
Begin
return xlsx_call("DelDefinedName", fh_, opts);
End;
///设置工作簿应用程序属性
///opts: stringjson字符串参数:
/// Application string
/// ScaleCrop bool
/// DocSecurity int
/// Company string
/// LinksUpToDate bool
/// HyperlinksChanged bool
/// AppVersion string
///eg. opts := '{"Application":"TS_Xlsx_Test","Company":"Shenzhen Tinysoft Co.,LTD","LinksUpToDate":true,"AppVersion":"10.1"}';
///返回: [err, info]
Function SetAppProps(opts);
Begin
return xlsx_call("SetAppProps", fh_, opts);
End;
///获取应用程序属性
///返回: [err, props:json]json字符串所有名称列表参见SetAppProps
Function GetAppProps();
Begin
return xlsx_call("GetAppProps", fh_);
End;
///设置工作簿的核心属性
///opts: stringjson字符串参数:
/// Title string 文档标题
/// Subject string 文档主题
/// Creator string 创作者
/// Keywords string 文档关键词
/// Description string 资源内容的说明
/// LastModifiedBy string 执行上次修改的用户
/// Language string 文档内容的主要语言
/// Identifier string 对给定上下文中的资源的明确引用
/// Revision string 文档修订版本
/// ContentStatus string 文档内容的状态。例如: 值可能包括 "Draft"、"Reviewed" 和 "Final"
/// Category string 文档内容的分类
/// Version string 版本号,该值由用户或应用程序设置
///eg. opts := '{"Title":"Test","Subject":"test","Creator":"Hans"}';
///返回: [err, info]
Function SetDocProps(opts);
Begin
return xlsx_call("SetDocProps", fh_, opts);
End;
///获取工作簿的核心属性
///返回: [err, props:json]json字符串所有名称列表参见SetDocProps
Function GetDocProps();
Begin
return xlsx_call("GetDocProps", fh_);
End;
///设置列可见性
///sheet: string工作表
///col: string如: "A"
///visible: bool
///返回: [err, info]
Function SetColVisible(sheet, col, visible);
Begin
return xlsx_call("SetColVisible", fh_, sheet, col, visible);
End;
///设置列宽度
///sheet: string工作表
///startcol: string开始列如: "A"
///endcol: string结束列如: "D"
///width: double
///返回: [err, info]
Function SetColWidth(sheet, startcol, endcol, width);
Begin
return xlsx_call("SetColWidth", fh_, sheet, startcol, endcol, width);
End;
///设置行可见性
///sheet: string工作表
///row: int
///visible: bool
///返回: [err, info]
Function SetRowVisible(sheet, row, visible);
Begin
return xlsx_call("SetRowVisible", fh_, sheet, row, visible);
End;
///设置行高度
///sheet: string工作表
///row: int
///height: double
///返回: [err, info]
Function SetRowHeight(sheet, row, height);
Begin
return xlsx_call("SetRowHeight", fh_, sheet, row, height);
End;
///获取工作表名
///index: int工作表索引
///返回: [err, sheetname:string]
Function GetSheetName(index);
Begin
return xlsx_call("GetSheetName", fh_, index);
End;
///获取工作表索引
///sheet: string工作表名
///返回: [err, sheetindex:int]
Function GetSheetIndex(sheet);
Begin
return xlsx_call("GetSheetIndex", fh_, sheet);
End;
///获取工作表映射表
///返回: [err, namemap:json]json串 {"1":"Sheet1","2":"Sheet2"}
Function GetSheetMap();
Begin
return xlsx_call("GetSheetMap", fh_);
End;
///获取工作表列表
///返回: [err, nameArr:json]json串 ["Sheet1","Sheet2"]
Function GetSheetS();
Begin
return xlsx_call("GetSheetS", fh_);
End;
///设置工作表名称
///oldname: string
///newname: string
///返回: [err, info]
Function SetSheetName(oldname, newname);
Begin
return xlsx_call("SetSheetName", fh_, oldname, newname);
End;
///设置工作表属性
///根据给定的工作表名称(大小写敏感)和筛选项设置工作表属性。
///sheet: string工作表名称
///opts: stringjson字符串属性:
/// CodeName string
/// EnableFormatConditionsCalculation bool
/// Published bool
/// FitToPage bool
/// TabColor string
/// AutoPageBreaks bool
/// OutlineSummaryBelow bool
///eg. opts := '{"CodeName":"code","EnableFormatConditionsCalculation":false,"TabColor":"#FFFF00","AutoPageBreaks":true}';
///返回: [err, info]
Function SetSheetPrOptions(sheet, opts);
Begin
return xlsx_call("SetSheetPrOptions", fh_, sheet, opts);
End;
///获取工作表属性
///根据给定的工作表名称(大小写敏感)和筛选项获取工作表属性。
///sheet: string工作表名称
///返回: [err, options:json]json串参见: SetSheetPrOptions
Function GetSheetPrOptions(sheet);
Begin
return xlsx_call("GetSheetPrOptions", fh_, sheet);
End;
///插入列,在指定列前插入空白列
///sheet: string工作表名称
///col: string 列名,如: "D"
///返回: [err, info]
Function InsertCol(sheet, col);
Begin
return xlsx_call("InsertCol", fh_, sheet, col);
End;
///插入行,在指定列前插入空白行
///sheet: string工作表名称
///row: int
///返回: [err, info]
Function InsertRow(sheet, row);
Begin
return xlsx_call("InsertRow", fh_, sheet, row);
End;
///追加复制行,根据给定的工作表名称(大小写敏感)和行号,在该行后追加复制。
///sheet: string工作表名称
///row: int
///返回: [err, info]
Function DuplicateRow(sheet, row);
Begin
return xlsx_call("DuplicateRow", fh_, sheet, row);
End;
///复制行,根据给定的工作表名称(大小写敏感)和行号,在指定行后复制该行。
///sheet: string工作表名称
///row: int
///row2: int
///返回: [err, info]
Function DuplicateRowTo(sheet, row, row2);
Begin
return xlsx_call("DuplicateRowTo", fh_, sheet, row, row2);
End;
///创建行的分级显示,根据给定的工作表名称(大小写敏感)、行号和分级参数创建组。
///sheet: string工作表名称
///row: int
///level: int分级参数
///返回: [err, info]
Function SetRowOutlineLevel(sheet, row, level);
Begin
return xlsx_call("SetRowOutlineLevel", fh_, sheet, row, level);
End;
///创建列的分级显示,根据给定的工作表名称(大小写敏感)、列名称和分级参数创建组。
///sheet: string工作表名称
///col: string
///level: int分级参数
///返回: [err, info]
Function SetColOutlineLevel(sheet, col, level);
Begin
return xlsx_call("SetColOutlineLevel", fh_, sheet, col, level);
End;
///获取行的分级显示
///sheet: string工作表名称
///row: int
///返回: [err, level:int]
Function GetRowOutlineLevel(sheet, row);
Begin
return xlsx_call("GetRowOutlineLevel", fh_, sheet, row);
End;
///获取列的分级显示
///sheet: string工作表名称
///col: string
///返回: [err, level:int]
Function GetColOutlineLevel(sheet, col);
Begin
return xlsx_call("GetColOutlineLevel", fh_, sheet, col);
End;
///在工作表中搜索,根据给定的工作表名称(大小写敏感),单元格值或正则表达式来获取坐标。此函数仅支持字符串和数字的完全匹配,不支持公式计算后的结果、格式化数字和条件搜索。如果搜索结果是合并的单元格,将返回合并区域左上角的坐标。
///sheet: string工作表名称
///value: string
///reg: bool是否正则表达式
///返回: [err, coordinates:json]json串满足条件的坐标数组
Function SearchSheet(sheet, value, reg);
Begin
return xlsx_call("SearchSheet", fh_, sheet, value, reg);
End;
///保护工作表,防止其他用户意外或有意更改、移动或删除工作表中的数据。
///sheet: string工作表名称
///opts: stringjson字符串属性:
/// AutoFilter bool
/// DeleteColumns bool
/// DeleteRows bool
/// EditObjects bool
/// EditScenarios bool
/// FormatCells bool
/// FormatColumns bool
/// FormatRows bool
/// InsertColumns bool
/// InsertHyperlinks bool
/// InsertRows bool
/// Password string
/// PivotTables bool
/// SelectLockedCells bool
/// SelectUnlockedCells bool
/// Sort bool
///eg. opts := '{"AutoFilter":true,"DeleteRows":true}';
///返回: [err, info]
Function ProtectSheet(sheet, opts);
Begin
return xlsx_call("ProtectSheet", fh_, sheet, opts);
End;
///取消保护工作表
///sheet: string工作表名称
///返回: [err, info]
Function UnProtectSheet(sheet);
Begin
return xlsx_call("UnProtectSheet", fh_, sheet);
End;
///删除列
///sheet: string工作表名称
///col: string如: "D"
///返回: [err, info]
Function RemoveCol(sheet, col);
Begin
return xlsx_call("RemoveCol", fh_, sheet, col);
End;
///删除行
///sheet: string工作表名称
///row: int
///返回: [err, info]
Function RemoveRow(sheet, row);
Begin
return xlsx_call("RemoveRow", fh_, sheet, row);
End;
///按行赋值
///sheet: string工作表名称
///axis: string起始坐标如: "A4"
///slice: [string,array]一维数组或json串一维数组如: '[1,3,2,2.1,"hello"]' array(1,2,3,2,1,"hello")
///返回: [err, info]
Function SetSheetRow(sheet, axis, slice);
Begin
if ifarray(slice) then slice := ExportJsonString(slice);
return xlsx_call("SetSheetRow", fh_, sheet, axis, slice);
End;
///插入分页符
///sheet: string工作表名称
///cell: string单元格坐标如: "A4"
///返回: [err, info]
Function InsertPageBreak(sheet, cell);
Begin
return xlsx_call("InsertPageBreak", fh_, sheet, cell);
End;
///删除分页符
///sheet: string工作表名称
///cell: string单元格坐标
///返回: [err, info]
Function RemovePageBreak(sheet, cell);
Begin
return xlsx_call("RemovePageBreak", fh_, sheet, cell);
End;
///按列获取全部单元格的值
///根据给定的工作表名(大小写敏感)按列获取该工作表上全部单元格的值,以二维数组形式返回,其中单元格的值将转换为 string 类型。如果可以将单元格格式应用于单元格的值,将使用应用后的值,否则将使用原始值。
///sheet: string工作表名称
///opts: string输出格式
///返回: [err, results:json], json串二维字符串数组
Function GetRows(sheet);
Begin
return xlsx_call("GetRows", fh_, sheet, opts);
End;
///按行获取全部单元格的值
///根据给定的工作表名(大小写敏感)按行获取该工作表上全部单元格的值,以二维数组形式返回,其中单元格的值将转换为 string 类型。如果可以将单元格格式应用于单元格的值,将使用应用后的值,否则将使用原始值。
///sheet: string工作表名称
///opts: string输出格式
///返回: [err, results:json], json串二维字符串数组
Function GetCols(sheet, opts);
Begin
return xlsx_call("GetCols", fh_, sheet, opts);
End;
///设置单元格的值
///sheet: string工作表名称
///axis: string单元格坐标如: "A6"
///val: Var可以是整数、字符串、数值型
///返回: [err, info]
Function SetCellValue(sheet, axis, val);
Begin
return xlsx_call("SetCellValue", fh_, sheet, axis, val);
End;
///获取单元格的值
///sheet: string工作表名称
///axis: string单元格坐标如: "A6"
///opts: string输出格式
///返回: [err, value:string, datatype:int]datatype参见GetCellType
Function GetCellValue(sheet, axis, opts);
Begin
return xlsx_call("GetCellValue", fh_, sheet, axis, opts);
End;
///设置布尔型值
///sheet: string工作表名称
///axis: string单元格坐标如: "A6"
///val: bool
///返回: [err, info]
Function SetCellBool(sheet, axis, val);
Begin
return xlsx_call("SetCellBool", fh_, sheet, axis,val);
End;
///设置默认字符型值
///sheet: string工作表名称
///axis: string单元格坐标如: "A6"
///val: string缺省值
///返回: [err, info]
Function SetCellDefault(sheet, axis, val);
Begin
return xlsx_call("SetCellDefault", fh_, sheet, axis, val);
End;
///创建单元格样式
/// Alignment 映射单元格对齐样式设置。
/// type Alignment struct {
/// Horizontal string
/// Indent int
/// JustifyLastLine bool
/// ReadingOrder int64
/// RelativeIndent int
/// ShrinkToFit bool
/// TextRotation int
/// Vertical string
/// WrapText bool
/// }
///
/// Border 映射单元格边框样式设置。
/// type Border struct {
/// Type string
/// Color string
/// Style int
/// }
/// Font 映射字体样式设置。
/// type Font struct {
/// Bold bool
/// Italic bool
/// Underline string
/// Family string
/// Size double
/// Strike bool
/// Color string
/// }
///
/// Fill 映射单元格样式填充设置。
/// type Fill struct {
/// Type string
/// Pattern int
/// Color string数组
/// Shading int
/// }
///
/// Protection 映射保护单元格属性设置。
/// type Protection struct {
/// Hidden bool
/// Locked bool
/// }
///
/// Style 映射单元格样式设置。
/// type Style struct {
/// Border Border数组
/// Fill Fill
/// Font Font
/// Alignment Alignment
/// Protection Protection
/// NumFmt int
/// DecimalPlaces int
/// CustomNumFmt string
/// Lang string
/// NegRed bool
/// }
///opts: stringjson串Style结构体
///返回: [err, StyleID:int]
Function NewStyle(opts);
Begin
return xlsx_call("NewStyle", fh_, opts);
End;
///设置单元格样式
///sheet: string工作表名称
///hcell: string左上角坐标
///vcell: string右下角坐标
///styleid: int样式Id
///返回: [err, info]
Function SetCellStyle(sheet, hcell, vcell, styleid);
Begin
return xlsx_call("SetCellStyle", fh_, sheet, hcell, vcell, styleid);
End;
///设置超链接
///sheet: string工作表名称
///axis: string单元格如"A7"
///link: string链接URL
///linkType: string链接类型资源类型分为外部链接地址 External 和工作簿内部位置链接 Location 两种。
///opts: stringjson串
///type HyperlinkOpts struct {
/// Display string
/// Tooltip string
///}
///返回: [err, info]
Function SetCellHyperLink(sheet, axis, link, linkType, opts);
Begin
return xlsx_call("SetCellHyperLink", fh_, sheet, axis, link, linkType, opts);
End;
///获取超链接
///sheet: string工作表名称
///axis: string单元格如"A7"
///返回: [err, link:string]
Function GetCellHyperLink(sheet, axis);
Begin
return xlsx_call("GetCellHyperLink", fh_, sheet, axis);
End;
///设置富文本格式
///sheet: string工作表名称
///axis: string单元格如"A7"
///txt: stringjson串RichText结构数组
/// type RichText struct {
/// Font Font
/// Text string
/// }
/// type Font struct {
/// Bold bool
/// Italic bool
/// Underline string
/// Family string
/// Size double
/// Strike bool
/// Color string
/// }
///返回: [err, info]
Function SetCellRichText(sheet, axis, txt);
Begin
return xlsx_call("SetCellRichText", fh_, sheet, axis, txt);
End;
///获取富文本格式
///sheet: string工作表名称
///axis: string单元格如"A7"
///返回: [err, txt:json]参见SetCellRichText
Function GetCellRichText(sheet, axis);
Begin
return xlsx_call("GetCellRichText", fh_, sheet, axis);
End;
///获取单元格数据类型
///sheet: string工作表名称
///axis: string单元格如"A7"
///返回: [err, datatype:int]Int = 0, Int64 = 20, Double = 1, String = 2, Date = 3, UnSet = 10, Err = -1
Function GetCellType(sheet, axis);
Begin
return xlsx_call("GetCellType", fh_, sheet, axis);
End;
///获取单元格样式索引,获取到的索引可以在复制单元格样式时,作为调用 SetCellValue 函数的参数使用。
///sheet: string工作表名称
///axis: string单元格如"A7"
///返回: [err, datastyle: int]
Function GetCellStyle(sheet, axis);
Begin
return xlsx_call("GetCellStyle", fh_, sheet, axis);
End;
///合并单元格
///sheet: string工作表名称
///hcell: string左上角坐标
///vcell: string右下角坐标
///返回: [err, info]
Function MergeCell(sheet, hcell, vcell);
Begin
return xlsx_call("MergeCell", fh_, sheet, hcell, vcell);
End;
///取消合并单元格
///sheet: string工作表名称
///hcell: string左上角坐标
///vcell: string右下角坐标
///返回: [err, info]
Function UnMergeCell(sheet, hcell, vcell);
Begin
return xlsx_call("UnMergeCell", fh_, sheet, hcell, vcell);
End;
///获取全部合并单元格的坐标区域和值。
///sheet: string工作表名称
///返回: [err, value:json],返回工作表所有合并区域数组
Function GetMergeCells(sheet);
Begin
return xlsx_call("GetMergeCells", fh_, sheet);
End;
///添加批注
///sheet: string工作表名称
///axis: string单元格如"A7"
///comment: stringjson串如: '{"author":"Excelize: ","text":"This is a comment."}'
///返回: [err, info]
Function AddComment(sheet, axis, comment);
Begin
return xlsx_call("AddComment", fh_, sheet, axis, comment);
End;
///获取批注
///返回: [err, allcomments:json],获取全部工作表中的批注。
Function GetComments();
Begin
return xlsx_call("GetComments", fh_);
End;
///设置公式
///sheet: string工作表名称
///axis: string单元格如"A7"
///formula: string公式
///返回: [err, info]
Function SetCellFormula(sheet, axis, formula);
Begin
return xlsx_call("SetCellFormula", fh_, sheet, axis, formula);
End;
///获取公式
///sheet: string工作表名称
///axis: string单元格如"A7"
///返回: [err, formula:string]
Function GetCellFormula(sheet, axis);
Begin
return xlsx_call("GetCellFormula", fh_, sheet, axis);
End;
///计算单元格的值
///sheet: string工作表名称
///axis: string单元格如"A7"
///返回: [err, result:string]
Function CalcCellValue(sheet, axis);
Begin
return xlsx_call("CalcCellValue", fh_, sheet, axis);
End;
///添加图表
///sheet: string工作表名称
///col:string左上角坐标
///format:stringjson串
///eg. opts := '{
/// "type": "col",
/// "series": [
/// {
/// "name": "Sheet1!$A$2",
/// "categories": "Sheet1!$B$1:$D$1",
/// "values": "Sheet1!$B$2:$D$2"
/// },
/// {
/// "name": "Sheet1!$A$3",
/// "categories": "Sheet1!$B$1:$D$1",
/// "values": "Sheet1!$B$3:$D$3"
/// }],
/// "format":
/// {
/// "x_scale": 1.0,
/// "y_scale": 1.0,
/// "x_offset": 15,
/// "y_offset": 10,
/// "print_obj": true,
/// "lock_aspect_ratio": false,
/// "locked": false
/// },
/// "legend":
/// {
/// "position": "left",
/// "show_legend_key": false
/// },
/// "title":
/// {
/// "name": "簇状柱形图 - 折线图"
/// },
/// "plotarea":
/// {
/// "show_bubble_size": true,
/// "show_cat_name": false,
/// "show_leader_lines": false,
/// "show_percent": true,
/// "show_series_name": true,
/// "show_val": true
/// }
/// }';
///combo:stringjson串用来指定创建组合图表该图表将两个或多个图表类型组合在一个图表中。
///返回: [err, info]
Function AddChart(sheet, cell, format, combo);
Begin
return xlsx_call("AddChart", fh_, sheet, cell, format, combo);
End;
///创建图表工作表
///sheet: string工作表名称
///format:stringjson串参见AddChart
///combo:stringjson串参见AddChart
///返回: [err, info]
Function AddChartSheet(sheet, format, combo);
Begin
return xlsx_call("AddChartSheet", fh_, sheet, format, combo);
End;
///删除图表
///sheet: string工作表名称
///cell: string单元格
///返回: [err, info]
Function DeleteChart(sheet, cell);
Begin
return xlsx_call("DeleteChart", fh_, sheet, cell);
End;
///插入图片
///sheet: string工作表名称
///cell: string单元格
///pictrue: string图片文件路径
///format: stringjson串图片格式例如偏移、缩放和打印设置等
///eg. format := '{
/// "x_scale": 0.5,
/// "y_scale": 0.5,
/// "hyperlink": "#Sheet2!D8",
/// "hyperlink_type": "Location"}';
///返回: [err, info]
Function AddPictrue(sheet, cell, pictrue, format);
Begin
return xlsx_call("AddPictrue", fh_, sheet, cell, pictrue, format);
End;
///删除图片
///sheet: string工作表名称
///cell: string单元格
///返回: [err, info]
Function DeletePictrue(sheet, cell);
Begin
return xlsx_call("DeletePictrue", fh_, sheet, cell);
End;
///添加形状
///sheet: string工作表名称
///cell: string单元格
///format: stringjson串样式包括偏移、缩放、拉伸、宽高比和打印属性等
///eg. format := '{
/// "type": "rect",
/// "color":
/// {
/// "line": "#4286F4",
/// "fill": "#8eb9ff"
/// },
/// "paragraph": [
/// {
/// "text": "Rectangle Shape",
/// "font":
/// {
/// "bold": true,
/// "italic": true,
/// "family": "Times New Roman",
/// "size": 36,
/// "color": "#777777",
/// "underline": "sng"
/// }
/// }],
/// "width": 180,
/// "height": 90,
/// "line":
/// {
/// "width": 1.5
/// }
/// }';
///返回: [err, info]
Function AddShape(sheet, cell, format);
Begin
return xlsx_call("AddShape", fh_, sheet, cell, format);
End;
///添加迷你图
///sheet: string工作表名称
///opt:stringjson串
/// type SparklineOption struct {
/// Location string-array
/// Range string-array
/// Max int
/// CustMax int
/// Min int
/// CustMin int
/// Type string
/// Weight double
/// DateAxis bool
/// Markers bool
/// High bool
/// Low bool
/// First bool
/// Last bool
/// Negative bool
/// Axis bool
/// Hidden bool
/// Reverse bool
/// Style int
/// SeriesColor string
/// NegativeColor string
/// MarkersColor string
/// FirstColor string
/// LastColor string
/// HightColor string
/// LowColor string
/// EmptyCells string
///}
///eg. opt := '"Location":["A1", "A2", "A3"],"Range": ["Sheet2!A1:J1", "Sheet2!A2:J2", "Sheet2!A3:J3"],"Markers":true}';
///返回: [err, info]
Function AddSparkLine(sheet, opt);
Begin
return xlsx_call("AddSparkLine", fh_, sheet, opt);
End;
///设置列样式
///sheet: string工作表名称
///columns: string列名"A" "D:H"
///styleID: int样式ID参见NewStyle
///返回: [err, info]
Function SetColStyle(sheet, columns, styleID);
Begin
return xlsx_call("SetColStyle", fh_, sheet, columns, styleID);
End;
///设置行样式
///sheet: string工作表名称
///row1: int
///row2: int
///styleID: int样式ID参见NewStyle
///返回: [err, info]
Function SetRowStyle(sheet, row1, row2, styelID);
Begin
return xlsx_call("SetRowStyle", fh_, sheet, row1, row2, styelID);
End;
///设置默认字体
///fontName: string
///返回: [err, info]
Function SetDefaultFont(sheet, fontName);
Begin
return xlsx_call("SetDefaultFont", fh_, fontName);
End;
///获取默认字体
///返回: [err, fontName:string]
Function GetDefaultFont();
Begin
return xlsx_call("GetDefaultFont", fh_);
End;
///添加数据验证
///sheet: string工作表名称
///opt: stringjson串
/// type DataValidation struct {
/// AllowBlank bool
/// Error string
/// ErrorStyle string
/// ErrorTitle string
/// Operator string
/// Prompt string
/// PromptTitle string
/// ShowDropDown bool
/// ShowErrorMessage bool
/// ShowInputMessage bool
/// Sqref string
/// Type string
/// Formula1 string
/// Formula2 string
///}
///返回: [err, info]
Function AddDataValidation(sheet, opt);
Begin
return xlsx_call("AddDataValidation", fh_, sheet, opt);
End;
///删除数据验证
///sheet: string工作表名称
///sqref: string数据区域"A7:B8"
///返回: [err, info]
Function DeleteDataValidation(sheet, sqref);
Begin
return xlsx_call("DeleteDataValidation", fh_, sheet, sqref);
End;
///创建数据透视表
///opt: stringjson串
/// type PivotTableField struct {
/// Compact bool
/// Data string
/// Name string
/// Outline bool
/// Subtotal string
/// DefaultSubtotal bool
///}
/// type PivotTableOption struct {
/// pivotTableSheetName string
/// DataRange string
/// PivotTableRange string
/// Rows array of PivotTableField
/// Columns array of PivotTableField
/// Data array of PivotTableField
/// Filter array of PivotTableField
/// RowGrandTotals bool
/// ColGrandTotals bool
/// ShowDrill bool
/// UseAutoFormatting bool
/// PageOverThenDown bool
/// MergeItem bool
/// CompactData bool
/// ShowError bool
/// ShowRowHeaders bool
/// ShowColHeaders bool
/// ShowRowStripes bool
/// ShowColStripes bool
/// ShowLastColumn bool
/// PivotTableStyleName string
///}
///返回: [err, info]
Function AddPivottable(opt);
Begin
return xlsx_call("AddPivottable", fh_, opt);
End;
///创建表格
///sheet: string工作表名称
///hCell: string左上角坐标 "A1"
///vCell: string右下角坐标 "D5"
///format: stringjson串
/// type formatTable struct {
/// TableName string
/// TableStyle string
/// ShowFirstColumn bool
/// ShowLastColumn bool
/// ShowRowStripes bool
/// ShowColumnStripes bool
///}
///返回: [err, info]
Function AddTable(sheet, hCell, vCell, format);
Begin
return xlsx_call("AddTable", fh_, sheet, hCell, vCell, format);
End;
///自动过滤器
///sheet: string工作表名称
///sheet: string工作表名称
///hCell: string左上角坐标 "A1"
///vCell: string右下角坐标 "D5"
///format: stringjson串
/// type formatAutoFilter struct {
/// Column string
/// Expression string
/// FilterList array of {
/// Column string
/// Value array of int
/// }
///}
///返回: [err, info]
Function AutoFilter(sheet, hCell, vCell, format);
Begin
return xlsx_call("AutoFilter", fh_, sheet, hCell, vCell, format);
End;
///清除单元格缓存
///返回: [err, info]
Function UpdateLinkedValue();
Begin
return xlsx_call("UpdateLinkedValue", fh_);
End;
///单元格坐标切分
///cell: string单元格坐标
///返回: [err, col:string, row:int]"AK47" -> return array(0, "AK", 47);
Function SplitCellName(cell);
Begin
return xlsx_call("SplitCellName", cell);
End;
///单元格坐标组合
///col: string
///row: int
///返回 [err, cell:string]参见SplitCellName
Function JoinCellName(sheet, col, row);
Begin
return xlsx_call("JoinCellName", col, row);
End;
///列名转索引
///name: string
///返回 [err, index:int]"AK" -> return array(0, 37);
Function ColumnNameToNumber(name);
Begin
return xlsx_call("ColumnNameToNumber", name);
End;
///索引转列名
///index: int
///返回 [err, name:string]37 -> return array(0, "AK");
Function ColumnNumberToName(index);
Begin
return xlsx_call("ColumnNumberToName", index);
End;
///单元格坐标转索引
///cell: string
///返回 [err, col:int, row: int] "A2" -> [1,2]
Function CellNameToCoordinates(cell);
Begin
return xlsx_call("CellNameToCoordinates", cell);
End;
///索引转单元格坐标
///col: int
///row: int
///abs: bool ,true返回"$A$1"格式false返回"A1"格式
///返回 [err, cell:string] [1,2,true] -> "$A$2"
Function CoordinatesToCellName(col, row, abs);
Begin
return xlsx_call("CoordinatesToCellName", col, row, abs);
End;
///创建条件格式样式
///style: string样式参见NewStyle
///返回: [err, info]
Function NewConditionalStyle(style);
Begin
return xlsx_call("NewConditionalStyle", fh_, style);
End;
///设置条件格式
///sheet: string工作表名称
///area: string"D1:D10"
///format: stringjson串
/// type formatConditional struct {
/// Type string
/// AboveAverage bool
/// Percent bool
/// Format int
/// Criteria string
/// Value string
/// Minimum string
/// Maximum string
/// MinType string
/// MidType string
/// MaxType string
/// MinValue string
/// MidValue string
/// MaxValue string
/// MinColor string
/// MidColor string
/// MaxColor string
/// MinLength string
/// MaxLength string
/// MultiRange string
/// BarColor string
///}
///返回: [err, info]
Function SetConditionalFormat(sheet, area, format);
Begin
return xlsx_call("SetConditionalFormat", fh_, sheet, area, format);
End;
///删除条件格式
///sheet: string工作表名称
///area: string"D1:D10"
///返回: [err, info]
Function UnSetConditionalFormat(sheet, area);
Begin
return xlsx_call("UnSetConditionalFormat", fh_, sheet, area);
End;
///设置窗格
///sheet: string工作表名称
///panes: stringjson串
/// type formatPanes struct {
/// Freeze bool
/// Split bool
/// XSplit int
/// YSplit int
/// TopLeftCell string
/// ActivePane string
/// Panes array of {
/// SQRef string
/// ActiveCell string
/// Pane string
/// }
///}
///返回: [err, info]
Function SetPanes(sheet, panes);
Begin
return xlsx_call("SetPanes", fh_, sheet, panes);
End;
///色值计算,通过给定的 RGB 格式色值与色调参数,计算出最终颜色。
///baseColor: stringRGB 格式色值
///tinit: double
///返回: [err, color:string]"FF#br#bg#bb"
Function ThemeColor(baseColor, tint);
Begin
return xlsx_call("ThemeColor", baseColor, tint);
End;
///RGB与HSL色彩空间色值转换
///r: int
///g: int
///b: int
///返回: [err, h:double, s:double, l:double]
Function RGBToHSL(r, g, b);
Begin
return xlsx_call("RGBToHSL", r, g, b);
End;
///HSL与RGB色彩空间色值转换
///h: double
///s: double
///l: double
///返回: [err, r:int, g:int, b:int]
Function HSLToRGB(sheet, h, s, l);
Begin
return xlsx_call("HSLToRGB", h, s, l);
End;
///嵌入 VBA 项目
///bin: string包含函数和/或宏的vba文件
///返回: [err, info]
Function AddVbaProject(bin);
Begin
return xlsx_call("AddVbaProject", fh_, bin);
End;
///获取总行数
///sheet: string工作表名称
///返回: [err, TotalRows:int]
Function TotalRows(sheet);
Begin
return xlsx_call("TotalRows", fh_, sheet);
End;
///获取总列数
///sheet: string工作表名称
///返回: [err, TotalCols:int]
Function TotalCols(sheet);
Begin
return xlsx_call("TotalCols", fh_, sheet);
End;
///判断单元格数据类型是Unset
///dataype: int
///返回: [err, result:bool]
Function IfUnset(datatye);
Begin
if datatype=10 then
return true;
return false;
End;
///判断单元格数据类型是Int
///dataype: int
///返回: [err, result:bool]
Function IfInt(datatye);
Begin
if datatype=0 then
return true;
return false;
End;
///判断单元格数据类型是Int64
///dataype: int
///返回: [err, result:bool]
Function IfInt64(datatye);
Begin
if datatype=20 then
return true;
return false;
End;
///判断单元格数据类型是Double
///dataype: int
///返回: [err, result:bool]
Function IfNumber(datatye);
Begin
if datatype=1 then
return true;
return false;
End;
///判断单元格数据类型是String
///dataype: int
///返回: [err, result:bool]
Function IfString(datatye);
Begin
if datatype=2 then
return true;
return false;
End;
///判断单元格数据类型是Date
///dataype: int
///返回: [err, result:bool]
Function IfDate(datatye);
Begin
if datatype=3 then
return true;
return false;
End;
///判断单元格数据类型是Error
///dataype: int
///返回: [err, result:bool]
Function IfError(datatye);
Begin
if datatype=-1 then
return true;
return false;
End;
///插入数据表
///sheet: string工作表名称
///axis: string左上角坐标如: "A4"
///data: table数据表
///IncludeHeader: bool 是否包括表头
///IncludeIndex: bool
///返回: [err, info]
Function InsertTable(sheet, axis, data, IncludeHeader, IncludeIndex);
Begin
if not ifarray(data) or length(data)=0 then
return array(-1, "Invalid Data.");
if FieldCount(data)=0 then Begin //数据是一维数组
return SetSheetRow(sheet, axis, data);
End;
[err, colNum, rowNum] := CellNameToCoordinates(axis);
if err then
return array(err, colNum);
if IncludeHeader then Begin
fields := FieldNames(data);
if IncludeIndex then Begin
fields := array("Index") union fields;
End;
[err, info] := SetSheetRow(sheet, axis, fields);
if err then
return array(err, info);
rowNum ++;
End;
if IncludeIndex then Begin
for i:=0 to length(data)-1 do Begin
[err, cell] := CoordinatesToCellName(colNum, rowNum + i);
if err then
return array(err, cell);
SetCellValue(sheet, cell, i+1);
End;
colNum ++;
End;
for i:=0 to length(data)-1 do Begin
[err, cell] := CoordinatesToCellName(colNum, rowNum + i);
if err then
return array(err, cell);
t := sselect * from data where thisrowindex = i End;
//PrintLn("cell={},data={}->{}",cell, data[i],t);
[err, info] := SetSheetRow(sheet, cell, t);
if err then
return array(err, info);
End;
return array(0, "OK");
End;
///读取数据表
///sheet: string工作表名称
///c1: string左上角坐标如: "A4"
///c2: string右下角坐标如: "B8"为空获取从c1开始的整张表
///IncludeHeader: bool 是否包括表头
///IncludeIndex: bool
///返回: [err, data:table]
Function GetTable(sheet, c1, c2, IncludeHeader, IncludeIndex);
Begin
r := array();
fields := array();
[err, colcount] := TotalCols(sheet);
if err then
return array(err, colcount);
[err, col1, row1] := CellNameToCoordinates(c1);
if err then
return array(err, col1);
if c2="" then Begin
col2 := colcount;
[err, row2] := TotalRows(sheet);
if err then
return array(err, row2);
End else Begin
[err, col2, row2] := CellNameToCoordinates(c2);
if err then
return array(err, col2);
End;
if col2 > colcount then
col2 := colcount;
if IncludeHeader then Begin
for i:=col1 to col2 do Begin
[err, cell] := CoordinatesToCellName(i, row1);
if err then
return array(err, cell);
[err, v, datatype] := GetCellValue(sheet, cell);
if err then
return array(err, v);
fields[length(fields)] := v;
End;
row1 ++;
End;
//echo tostn(array(col1,col2,row1,row2));
for i:=row1 to row2 do Begin
if IncludeIndex and IncludeHeader then Begin
r[cnt]['Index'] := i - row1 + 1;
End
else if IncludeIndex then Begin
r[cnt][0] := i - row1 + 1;
End;
for j:=col1 to col2 do Begin
[err, cell] := CoordinatesToCellName(j, i);
if err then
return array(err, cell);
[err, v, datatype] := GetCellValue(sheet, cell);
//echo cell, "->", tostn(array(v, datatype)),"\n";
if err then
return array(err, v);
try
case datatype of
0: v := strtoint(v);
20: v := strtoint(v);
1,3,10: v := strtofloat(v);
//-1,2://string,Err
End;
except
End;
if IncludeHeader then Begin
r[cnt][ fields[j - col1] ] := v;
End
else Begin
r[cnt][ j - col1 + ifthen(IncludeIndex,1,0)] := v;
End;
End;
cnt++;
End;
return array(0, r);
End;
End;