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 如何插入目标上的单元格。 它们可以向下或向左移动。 指定 ShiftRowDown 或 ShiftColRight 作为模式相当于指定一个 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 删除模式。请注意,ShiftRowDown 和 ShiftColRight 等价于 ShiftRangeDown 和 ShiftRangeRight,其单元格范围分别为完整的行或列。
removeFormats 如果为 true,则在清除范围时,格式和数据都将从范围中删除。 如果 insertmode 不是NoneDown 或 NoneRight,则此参数无效,因为如果不是,则整个范围将向上或向左移动。
TFlxInsertMode
插入模式。
删除范围时也使用此枚举。 删除时,Down 表示 Up,Right 表示 Left。
unit
- NoneDown 不会插入单元格,只会覆盖现有单元格。 如果 count > 0,则将向下复制其他范围。 删除时,此模式将清除单元格并且不移动任何内容。
- NoneRight 不会插入单元格,只会覆盖现有单元格。 如果 count > 0,则将向右复制其他范围。 删除时,此模式将清除单元格并且不移动任何内容。
- ShiftRowDown 插入整行。向下移动所有目标行。 删除时,向上移动单元格。
- ShiftColRight 插入整列。 将所有目标列向右移动。 删除时,将已删除列右侧的列向左移动。
- ShiftRangeDown 向下移动所有目标单元格。 这不会移动整行,只会移动范围内的单元格。 删除时,向上移动单元格。
- ShiftRangeRight 将所有目标单元格向右移动。 这不会移动整个列,只会移动范围内的单元格。 删除时,将单元格向左移动。
TRangeCopyMode
调用InsertAndCopyRange
时对单元格所做的操作。
unit
- 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;