delphi TMS FlexCel常用操作

TMS FlexCel常用操作

属性和方法

TExcelFile.InsertAndCopyRange

procedure InsertAndCopyRange(const sourceRange: TXlsCellRange; const destRow: Integer; const destCol: Integer; const destCount: Integer; const insertMode: TFlxInsertMode);
procedure InsertAndCopyRange(const sourceRange: TXlsCellRange; const destRow: Integer; const destCol: Integer; const destCount: Integer; const insertMode: TFlxInsertMode; const copyMode: TRangeCopyMode);
procedure InsertAndCopyRange(const sourceRange: TXlsCellRange; const destRow: Integer; const destCol: Integer; const destCount: Integer; const insertMode: TFlxInsertMode; const copyMode: TRangeCopyMode; const sourceWorkbook: TExcelFile; const sourceSheet: Integer);
procedure InsertAndCopyRange(const sourceRange: TXlsCellRange; const destRow: Integer; const destCol: Integer; const destCount: Integer; const insertMode: TFlxInsertMode; const copyMode: TRangeCopyMode; const sourceWorkbook: TExcelFile; const sourceSheet: Integer; const ObjectsInRange: TExcelObjectList);

将一系列单元格从一个位置插入或复制到另一个位置。

重载

InsertAndCopyRange(TXlsCellRange, Integer, Integer, Integer, TFlxInsertMode)

此重载对于在同一工作表中插入和复制很有用。

InsertAndCopyRange(TXlsCellRange, Integer, Integer, Integer, TFlxInsertMode, TRangeCopyMode)

此重载只对插入有用,而不是复制。

InsertAndCopyRange(TXlsCellRange, Integer, Integer, Integer, TFlxInsertMode, TRangeCopyMode, TExcelFile, Integer)InsertAndCopyRange(TXlsCellRange, Integer, Integer, Integer, TFlxInsertMode, TRangeCopyMode, TExcelFile, Integer, TExcelObjectList)

此重载对于从另一个文件复制很有用。它的速度和完整性不如其他重载版本,因为它必须对数据进行大量转换。

参数

sourceRange 要复制的单元格范围。如果指定了整行,它们将与行格式信息和大小一起复制。 如果只复制行的一部分,则不会复制行格式。 这同样适用于列。 复制所有行和列的唯一方法是指定完整 (A:IV) 范围。

destRow 将复制单元格的目标行。

destCol 将复制单元格的目标列。

destCount sourceRange在(desRow, destCol)被复制的次数。 例如,如果将destCount设置为2,则 sourceRange 将在 (destRow, destCol) 处复制 2 次

insertMode 如何插入目标上的单元格。 它们可以向下或向左移动。 指定 ShiftRowDownShiftColRight 作为模式相当于指定一个 sourceRange 分别包括完整的行或列。

copyMode 将复制 sourceRange 上的哪些单元格。 如果要替换复制的单元格上的值,可以指定OnlyFormulas。如果您只想插入单元格而不是复制,请指定 None

sourceWorkbook 从其中复制单元格的工作簿。这可能是同一个工作簿,您可以从另一个工作表中复制。

sourceSheet 源工作簿上的工作表索引。 如果 sourceWorkbook 与此实例相同,并且 sourceSheet 是实例上的活动工作表,那么这个方法相当于更简单的重载版本。

ObjectsInRange 返回要复制的范围内的对象。这是一个优化,因此您不必再次查找这些对象。将其设置为null,不返回任何对象

此方法是 FlexCel API 上最重要的方法之一,它允许您将单元格范围从一个位置复制到另一个位置,像 Excel 一样调整公式、图像和所有内容。

TExcelFile.DeleteRange

删除一系列单元格,并将所有单元格向上移动或所有单元格向左移动,具体取决于插入模式。

procedure DeleteRange(const cellRange: TXlsCellRange; const insertMode: TFlxInsertMode);
procedure DeleteRange(const sheet1: Integer; const sheet2: Integer; const cellRange: TXlsCellRange; const insertMode: TFlxInsertMode);
procedure DeleteRange(const sheet1: Integer; const sheet2: Integer; const cellRange: TXlsCellRange; const insertMode: TFlxInsertMode; const removeFormats: Boolean);

参数

sheet1 删除单元格的第一个工作表。

sheet2 删除单元格的最后一个工作表。

cellRange 要删除的单元格范围。

insertMode 删除模式。请注意,ShiftRowDownShiftColRight 等价于 ShiftRangeDownShiftRangeRight,其单元格范围分别为完整的行或列。

removeFormats 如果为 true,则在清除范围时,格式和数据都将从范围中删除。 如果 insertmode 不是NoneDownNoneRight,则此参数无效,因为如果不是,则整个范围将向上或向左移动。

TFlxInsertMode

插入模式。

删除范围时也使用此枚举。 删除时,Down 表示 Up,Right 表示 Left。

unit

FlexCel.Core

  • NoneDown 不会插入单元格,只会覆盖现有单元格。 如果 count > 0,则将向下复制其他范围。 删除时,此模式将清除单元格并且不移动任何内容。
  • NoneRight 不会插入单元格,只会覆盖现有单元格。 如果 count > 0,则将向右复制其他范围。 删除时,此模式将清除单元格并且不移动任何内容。
  • ShiftRowDown 插入整行。向下移动所有目标行。 删除时,向上移动单元格。
  • ShiftColRight 插入整列。 将所有目标列向右移动。 删除时,将已删除列右侧的列向左移动。
  • ShiftRangeDown 向下移动所有目标单元格。 这不会移动整行,只会移动范围内的单元格。 删除时,向上移动单元格。
  • ShiftRangeRight 将所有目标单元格向右移动。 这不会移动整个列,只会移动范围内的单元格。 删除时,将单元格向左移动。

TRangeCopyMode

调用InsertAndCopyRange时对单元格所做的操作。

unit

FlexCel.Core

  • All 将复制所有(值、范围、图像、公式等)。
  • OnlyFormulas 将复制除值之外的所有内容。当你要替换这些值时很有用。
  • None 不会复制任何东西。 只插入。
  • OnlyFormulasAndNoObjects 将复制除值和对象(如图像)之外的所有内容。 当你要替换这些值时很有用。
  • AllIncludingDontMoveAndSizeObjects 将复制所有对象,包括文件中标记为“不复制”的对象。您通常不会想要使用它。
  • Formats 将复制单元格格式,但不复制单元格内容。 图像和对象也将被复制。

例子

复制单元格

uses VCL.FlexCel.Core, FlexCel.XlsAdapter;

procedure TForm1.Button3Click(Sender: TObject);
var
  Xls: TXlsFile;
  I: Integer;
begin
  //创建一个Excel文件
  Xls := TXlsFile.Create(1, TExcelFileFormat.v2019, true);
  try
    //添加A1-C5内容
    for I := 1 to 5 do
      Xls.SetCellValue(I, 1, 'A' + IntToStr(I));
    for I := 1 to 5 do
      Xls.SetCellValue(I, 2, 'B' + IntToStr(I));
    for I := 1 to 5 do
      Xls.SetCellValue(I, 3, 'C' + IntToStr(I));
    //复制A2-C4内容到1行5列(E1)
    Xls.InsertAndCopyRange(TXlsCellRange.Create('A2:C4'), 1, 5, 1, TFlxInsertMode.ShiftRangeDown);
    //保存文件
    Xls.Save('C:\Users\Administrator\Desktop\ceshi.xlsx');
  finally
    Xls.Free;
  end;
end;

插入单元格

uses VCL.FlexCel.Core, FlexCel.XlsAdapter;

procedure TForm1.Button4Click(Sender: TObject);
var
  Xls: TXlsFile;
  I: Integer;
begin
  //创建一个Excel文件
  Xls := TXlsFile.Create(1, TExcelFileFormat.v2019, true);
  try
    //添加A1-C5内容
    for I := 1 to 5 do
      Xls.SetCellValue(I, 1, 'A' + IntToStr(I));
    for I := 1 to 5 do
      Xls.SetCellValue(I, 2, 'B' + IntToStr(I));
    for I := 1 to 5 do
      Xls.SetCellValue(I, 3, 'C' + IntToStr(I));
    //第2行插入空行
    Xls.InsertAndCopyRange(TXlsCellRange.Create(1, 1, 1, 1), 2, 1, 1,
      TFlxInsertMode.ShiftRowDown, TRangeCopyMode.None);
    //第2列插入空列
    Xls.InsertAndCopyRange(TXlsCellRange.Create(1, 1, 1, 1), 1, 2, 1,
      TFlxInsertMode.ShiftColRight, TRangeCopyMode.None);
    //第5行第3列插入单元格
    Xls.InsertAndCopyRange(TXlsCellRange.Create(1, 1, 1, 1), 5, 3, 1,
      TFlxInsertMode.ShiftRangeDown, TRangeCopyMode.None);
    //保存文件
    Xls.Save('C:\Users\Administrator\Desktop\ceshi.xlsx');
  finally
    Xls.Free;
  end;
end;

删除单元格

uses VCL.FlexCel.Core, FlexCel.XlsAdapter;

procedure TForm1.Button5Click(Sender: TObject);
var
  Xls: TXlsFile;
  I: Integer;
begin
  //创建一个Excel文件
  Xls := TXlsFile.Create(1, TExcelFileFormat.v2019, true);
  try
    //添加A1-C5内容
    for I := 1 to 5 do
      Xls.SetCellValue(I, 1, 'A' + IntToStr(I));
    for I := 1 to 5 do
      Xls.SetCellValue(I, 2, 'B' + IntToStr(I));
    for I := 1 to 5 do
      Xls.SetCellValue(I, 3, 'C' + IntToStr(I));
    //删除A2-B3的内容
    Xls.DeleteRange(TXlsCellRange.Create('A2:B3'), TFlxInsertMode.ShiftRangeDown);
    //删除C列
    Xls.DeleteRange(TXlsCellRange.Create('C:C'), TFlxInsertMode.ShiftColRight);
    //保存文件
    Xls.Save('C:\Users\Administrator\Desktop\ceshi.xlsx');
  finally
    Xls.Free;
  end;
end;
posted @ 2022-06-27 16:53  txgh  阅读(1326)  评论(0编辑  收藏  举报