想买大牛打工仔 發表於 2022-6-27 16:53:00

delphi TMS FlexCel常用操作

<h1 id="tms-flexcel常用操作">TMS FlexCel常用操作</h1>
<h2 id="属性和方法">属性和方法</h2>
<h3 id="texcelfileinsertandcopyrange">TExcelFile.InsertAndCopyRange</h3>
<pre><code class="language-delphi">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);
</code></pre>
<p>将一系列单元格从一个位置插入或复制到另一个位置。</p>
<p><strong>重载</strong></p>
<p><code>InsertAndCopyRange(TXlsCellRange, Integer, Integer, Integer, TFlxInsertMode)</code></p>
<p>此重载对于在同一工作表中插入和复制很有用。</p>
<p><code>InsertAndCopyRange(TXlsCellRange, Integer, Integer, Integer, TFlxInsertMode, TRangeCopyMode)</code></p>
<p>此重载只对插入有用,而不是复制。</p>
<p><code>InsertAndCopyRange(TXlsCellRange, Integer, Integer, Integer, TFlxInsertMode, TRangeCopyMode, TExcelFile,Integer)</code>、<code>InsertAndCopyRange(TXlsCellRange, Integer, Integer, Integer, TFlxInsertMode, TRangeCopyMode, TExcelFile, Integer,TExcelObjectList)</code></p>
<p>此重载对于从另一个文件复制很有用。它的速度和完整性不如其他重载版本,因为它必须对数据进行大量转换。</p>
<p><strong>参数</strong></p>
<p><em>sourceRange</em>要复制的单元格范围。如果指定了整行,它们将与行格式信息和大小一起复制。 如果只复制行的一部分,则不会复制行格式。 这同样适用于列。 复制所有行和列的唯一方法是指定完整 (A:IV) 范围。</p>
<p><em>destRow</em>将复制单元格的目标行。</p>
<p><em>destCol</em>将复制单元格的目标列。</p>
<p><em>destCount</em><em>sourceRange</em>在(<em>desRow</em>, <em>destCol</em>)被复制的次数。 例如,如果将<em>destCount</em>设置为2,则 <em>sourceRange</em> 将在 (<em>destRow</em>, <em>destCol</em>) 处复制 2 次</p>
<p><em>insertMode</em>如何插入目标上的单元格。 它们可以向下或向左移动。 指定 <em>ShiftRowDown</em> 或 <em>ShiftColRight</em> 作为模式相当于指定一个 <em>sourceRange</em> 分别包括完整的行或列。</p>
<p><em>copyMode</em>将复制 <em>sourceRange</em> 上的哪些单元格。 如果要替换复制的单元格上的值,可以指定<em>OnlyFormulas</em>。如果您只想插入单元格而不是复制,请指定 <em>None</em>。</p>
<p><em>sourceWorkbook</em>从其中复制单元格的工作簿。这可能是同一个工作簿,您可以从另一个工作表中复制。</p>
<p><em>sourceSheet</em>源工作簿上的工作表索引。 如果 <em>sourceWorkbook</em> 与此实例相同,并且 <em>sourceSheet</em> 是实例上的活动工作表,那么这个方法相当于更简单的重载版本。</p>
<p><em>ObjectsInRange</em>返回要复制的范围内的对象。这是一个优化,因此您不必再次查找这些对象。将其设置为<em>null</em>,不返回任何对象</p>
<blockquote>
<p>此方法是 FlexCel API 上最重要的方法之一,它允许您将单元格范围从一个位置复制到另一个位置,像 Excel 一样调整公式、图像和所有内容。</p>
</blockquote>
<h3 id="texcelfiledeleterange">TExcelFile.DeleteRange</h3>
<p>删除一系列单元格,并将所有单元格向上移动或所有单元格向左移动,具体取决于插入模式。</p>
<pre><code class="language-delphi">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);
</code></pre>
<p><strong>参数</strong></p>
<p><em>sheet1</em>删除单元格的第一个工作表。</p>
<p><em>sheet2</em>删除单元格的最后一个工作表。</p>
<p><em>cellRange</em>要删除的单元格范围。</p>
<p><em>insertMode</em>删除模式。请注意,<em>ShiftRowDown</em> 和 <em>ShiftColRight</em> 等价于 <em>ShiftRangeDown</em> 和 <em>ShiftRangeRight</em>,其单元格范围分别为完整的行或列。</p>
<p><em>removeFormats</em>   如果为 <em>true</em>,则在清除范围时,格式和数据都将从范围中删除。 如果 <em>insertmode</em> 不是<em>NoneDown</em> 或 <em>NoneRight</em>,则此参数无效,因为如果不是,则整个范围将向上或向左移动。</p>
<h3 id="tflxinsertmode">TFlxInsertMode</h3>
<p>插入模式。</p>
<blockquote>
<p>删除范围时也使用此枚举。 删除时,Down 表示 Up,Right 表示 Left。</p>
</blockquote>
<p><strong>unit</strong></p>
<p>FlexCel.Core</p>
<ul>
<li><em>NoneDown</em>   不会插入单元格,只会覆盖现有单元格。 如果 count &gt; 0,则将向下复制其他范围。 删除时,此模式将清除单元格并且不移动任何内容。</li>
<li><em>NoneRight</em>   不会插入单元格,只会覆盖现有单元格。 如果 count &gt; 0,则将向右复制其他范围。 删除时,此模式将清除单元格并且不移动任何内容。</li>
<li><em>ShiftRowDown</em>插入整行。向下移动所有目标行。 删除时,向上移动单元格。</li>
<li><em>ShiftColRight</em>插入整列。 将所有目标列向右移动。 删除时,将已删除列右侧的列向左移动。</li>
<li><em>ShiftRangeDown</em>向下移动所有目标单元格。 这不会移动整行,只会移动范围内的单元格。 删除时,向上移动单元格。</li>
<li><em>ShiftRangeRight</em>将所有目标单元格向右移动。 这不会移动整个列,只会移动范围内的单元格。 删除时,将单元格向左移动。</li>
</ul>
<h3 id="trangecopymode">TRangeCopyMode</h3>
<p>调用<code>InsertAndCopyRange</code>时对单元格所做的操作。</p>
<p><strong>unit</strong></p>
<p>FlexCel.Core</p>
<ul>
<li><em>All</em>将复制所有(值、范围、图像、公式等)。</li>
<li><em>OnlyFormulas</em>将复制除值之外的所有内容。当你要替换这些值时很有用。</li>
<li><em>None</em>不会复制任何东西。 只插入。</li>
<li><em>OnlyFormulasAndNoObjects</em>将复制除值和对象(如图像)之外的所有内容。 当你要替换这些值时很有用。</li>
<li><em>AllIncludingDontMoveAndSizeObjects</em>将复制所有对象,包括文件中标记为“不复制”的对象。您通常不会想要使用它。</li>
<li><em>Formats</em>将复制单元格格式,但不复制单元格内容。 图像和对象也将被复制。</li>
</ul>
<h2 id="例子">例子</h2>
<h3 id="复制单元格">复制单元格</h3>
<pre><code class="language-delphi">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;
</code></pre>
<h3 id="插入单元格">插入单元格</h3>
<pre><code class="language-delphi">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;
</code></pre>
<h3 id="删除单元格">删除单元格</h3>
<pre><code class="language-delphi">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;
</code></pre><br><br>
来源:https://www.cnblogs.com/txgh/p/16416710.html
頁: [1]
查看完整版本: delphi TMS FlexCel常用操作