演示使用fpspreadsheet库生成包含单元格格式的Excel 8+文件

1 简介

fpspreadsheet的强大之处在于,可以完全不必依赖外部应用程序,如excel和wps,快速读写电子表格数据和格式。如果使用com方式调用外部应用程,速度太慢了,而且受到不少限制。

这里简单演示生成xlsx文件,并且设置部分单元格边框属性和底色。

2 设置边框属性

向部分单元格写入文本并设置边框属性。

  MyWorksheet.WriteText(1, 3, '[N]');    // D2
  MyCell := MyWorksheet.GetCell(1, 3);
  MyCell^.Border := [cbNorth]; 

3 设置单元格边框和底色

  MyWorksheet.WriteText(2, 1, 'Compras');
  MyCell := MyWorksheet.GetCell(2, 1);
  MyCell^.Border := [cbWest];
  MyCell^.BackgroundColor := scGrey10pct; 

最终生成2个sheet。

 

 4 源代码

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,
   xlsbiff8, fpsopendocument,
  fpscell,
  fpsTypes, fpspreadsheet, xlsxml, fpsutils, fpsallformats, fpsDataset;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);

  private
    MyWorkbook: TsWorkbook;
    MyWorksheet: TsWorksheet;
    MyDir: string;
    MyCell: PCell;

    procedure WriteFirstWorksheet();
    procedure WriteSecondWorksheet();
  public

  end;

var
  Form1: TForm1;

implementation

{$R *.frm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  MyDir := ExtractFilePath(ParamStr(0));

  // Create the spreadsheet
  MyWorkbook := TsWorkbook.Create;

  WriteFirstWorksheet();
  WriteSecondWorksheet();

  // Save the spreadsheet to a file
  MyWorkbook.WriteToFile(MyDir + 'color.xlsx', sfExcel8, true);
  MyWorkbook.Free;

  showmessage('ok');
end;

procedure TForm1.WriteFirstWorksheet();
begin
  MyWorksheet := MyWorkbook.AddWorksheet('Worksheet1');

  // Write some cells
  MyWorksheet.WriteText(1, 0, 'Border'); // A2

  MyWorksheet.WriteText(1, 1, '[]');     // B2
  MyCell := MyWorksheet.GetCell(1, 1);
  MyCell^.Border := [];

  MyWorksheet.WriteText(1, 3, '[N]');    // D2
  MyCell := MyWorksheet.GetCell(1, 3);
  MyCell^.Border := [cbNorth];

  MyWorksheet.WriteText(1, 5, '[W]');    // F2
  MyCell := MyWorksheet.GetCell(1, 5);
  MyCell^.Border := [cbWest];

  MyWorksheet.WriteText(1, 7, '[E]');    // H2
  MyCell := MyWorksheet.GetCell(1, 7);
  MyCell^.Border := [cbEast];

  MyWorksheet.WriteText(1, 9, '[S]');    // J2
  MyCell := MyWorksheet.GetCell(1, 9);
  MyCell^.Border := [cbSouth];

  MyWorksheet.WriteText(3, 1, '[N,W]');  // B4
  MyCell := MyWorksheet.GetCell(3, 1);
  MyCell^.Border := [cbNorth, cbWest];

  MyWorksheet.WriteText(3, 3, '[N,E]');  // D4
  MyCell := MyWorksheet.GetCell(3, 3);
  MyCell^.Border := [cbNorth, cbEast];

  MyWorksheet.WriteText(3, 5, '[N,S]');  // F4
  MyCell := MyWorksheet.GetCell(3, 5);
  MyCell^.Border := [cbNorth, cbSouth];

  MyWorksheet.WriteText(3, 7, '[W,E]');  // H4
  MyCell := MyWorksheet.GetCell(3, 7);
  MyCell^.Border := [cbWest, cbEast];

  MyWorksheet.WriteText(3, 9, '[W,S]');  // J4
  MyCell := MyWorksheet.GetCell(3, 9);
  MyCell^.Border := [cbWest, cbSouth];

  MyWorksheet.WriteText(3, 11, '[E,S]'); // L4
  MyCell := MyWorksheet.GetCell(3, 11);
  MyCell^.Border := [cbEast, cbSouth];

  MyWorksheet.WriteText(5, 1, '[N,W,E]');// B6
  MyCell := MyWorksheet.GetCell(5, 1);
  MyCell^.Border := [cbNorth, cbWest, cbEast];

  MyWorksheet.WriteText(5, 3, '[N,W,S]');// D6
  MyCell := MyWorksheet.GetCell(5, 3);
  MyCell^.Border := [cbNorth, cbWest, cbSouth];

  MyWorksheet.WriteText(5, 5, '[N,E,S]');// F6
  MyCell := MyWorksheet.GetCell(5, 5);
  MyCell^.Border := [cbNorth, cbEast, cbSouth];

  MyWorksheet.WriteText(5, 7, '[W,E,S]');// H6
  MyCell := MyWorksheet.GetCell(5, 7);
  MyCell^.Border := [cbWest, cbEast, cbSouth];

  MyWorksheet.WriteText(5, 9, '[N,W,E,S]');// J6
  MyCell := MyWorksheet.GetCell(5, 9);
  MyCell^.Border := [cbNorth, cbWest, cbEast, cbSouth];
  MyCell^.BackgroundColor := scGreen;
end;

procedure TForm1.WriteSecondWorksheet();
begin
  MyWorksheet := MyWorkbook.AddWorksheet('Worksheet2');

  // Write some cells

  // Line 1

  MyWorksheet.WriteText(1, 1, 'Relatório');
  MyCell := MyWorksheet.GetCell(1, 1);
  MyCell^.Border := [cbNorth, cbWest, cbSouth];
  MyCell^.BackgroundColor := scGrey20pct;

  MyWorksheet.WriteText(1, 2, ' ');
  MyCell := MyWorksheet.GetCell(1, 2);
  MyCell^.Border := [cbNorth, cbEast, cbSouth];
  MyCell^.BackgroundColor := scGrey20pct;

  // Line 2

  MyWorksheet.WriteText(2, 1, 'Compras');
  MyCell := MyWorksheet.GetCell(2, 1);
  MyCell^.Border := [cbWest];
  MyCell^.BackgroundColor := scGrey10pct;

  MyWorksheet.WriteText(2, 2, 'R$ 20');
  MyCell := MyWorksheet.GetCell(2, 2);
  MyCell^.Border := [cbEast];
  MyCell^.BackgroundColor := scGrey10pct;

  // Line 3

  MyWorksheet.WriteText(3, 1, 'Total:');
  MyCell := MyWorksheet.GetCell(3, 1);
  MyCell^.Border := [cbWest, cbSouth];
  MyCell^.BackgroundColor := scGrey10pct;

  MyWorksheet.WriteText(3, 2, 'R$ 20');
  MyCell := MyWorksheet.GetCell(3, 2);
  MyCell^.Border := [cbEast, cbSouth];
  MyCell^.BackgroundColor := scGrey10pct;
end;

end.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在 Oracle 中生成 Excel 文件时,您可以使用 "dbms_xlsx" 包中的 "set_cell_style" 过程来修改单元格格式。该过程允许您指定单元格的字体、背景颜色、边框样式、文本对齐方式等属性。 以下是一个示例代码,演示如何使用 "dbms_xlsx" 包中的 "set_cell_style" 过程来修改单元格格式: ``` DECLARE l_xlsx_file BLOB; l_sheet_id PLS_INTEGER; l_row PLS_INTEGER; l_col PLS_INTEGER; l_cell_value VARCHAR2(4000); l_style_id PLS_INTEGER; BEGIN -- 创建 Excel 文件 l_xlsx_file := dbms_xlsx.create_workbook; -- 添加一个工作表 l_sheet_id := dbms_xlsx.add_sheet(l_xlsx_file, 'Sheet1'); -- 在第一行添加一些数据 l_row := 1; l_col := 1; l_cell_value := 'Hello, world!'; dbms_xlsx.set_cell_value(l_xlsx_file, l_sheet_id, l_row, l_col, l_cell_value); -- 修改第一行第一列的单元格格式 l_style_id := dbms_xlsx.create_style(l_xlsx_file); dbms_xlsx.set_font_name(l_xlsx_file, l_style_id, 'Arial'); dbms_xlsx.set_font_size(l_xlsx_file, l_style_id, 12); dbms_xlsx.set_font_color(l_xlsx_file, l_style_id, dbms_xlsx.rgb(255, 0, 0)); -- 设置字体颜色为红色 dbms_xlsx.set_fill_color(l_xlsx_file, l_style_id, dbms_xlsx.rgb(255, 255, 0)); -- 设置背景颜色为黄色 dbms_xlsx.set_border_style(l_xlsx_file, l_style_id, dbms_xlsx.bs_thin); -- 设置边框样式为细线 dbms_xlsx.set_text_wrap(l_xlsx_file, l_style_id, TRUE); -- 设置文本自动换行 dbms_xlsx.set_horizontal_alignment(l_xlsx_file, l_style_id, dbms_xlsx.ha_center); -- 设置水平对齐方式为居中 dbms_xlsx.set_vertical_alignment(l_xlsx_file, l_style_id, dbms_xlsx.va_center); -- 设置垂直对齐方式为居中 dbms_xlsx.set_cell_style(l_xlsx_file, l_sheet_id, l_row, l_col, l_style_id); -- 将 Excel 文件保存到本地目录 dbms_xlsx.save(l_xlsx_file, 'MY_EXCEL_FILE.xlsx', 'TEMP'); END; ``` 在上述代码中,我们首先创建了一个 Excel 文件,然后向第一行第一列添加了一个数据单元格。接着,我们使用 "create_style" 过程创建一个新的样式,并使用 "set_XXX" 系列过程设置样式的各个属性。最后,我们使用 "set_cell_style" 过程将样式应用到第一行第一列的单元格上。最后,我们使用 "save" 过程将 Excel 文件保存到本地目录中。 请注意,以上代码仅供参考,您需要根据您自己的需求进行更改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值