如何使用 IronXL 复制单元格

如何使用 IronXL 在 C# 中复制单元格(编辑Excel C# 数据操作)

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronXL 能够使用单一方法在 Excel 电子表格中复制单元格、区域、行或列,这是在创建Excel表格或进行Excel数据提取时保留格式和样式的关键XLSX文件操作。

复制单元格 "功能可复制单元格内容并将其粘贴到其他单元格中。 它复制了工作表中的数据、公式、格式和其他属性。 Whether creating spreadsheets from scratch or loading existing Excel files, the copy functionality is essential for efficient data manipulation.

快速入门:一行复制一列或一个区域

使用一个方法调用将整个范围(单个单元格、行、列或块)从一个工作表复制到另一个工作表。 Copy 函数保留样式和格式,同时使 Excel 自动化变得快速而简单。

  1. 使用 NuGet 包管理器安装 https://www.nuget.org/packages/IronXL.Excel

    PM > Install-Package IronXL.Excel
  2. 复制并运行这段代码。

    workSheet.GetColumn(0).Copy(workBook.GetWorkSheet("Sheet1"), "H1");
  3. 部署到您的生产环境中进行测试

    通过免费试用立即在您的项目中开始使用IronXL

    arrow pointer


如何在 Excel 中复制单个单元格?

要复制选定单元格的内容,请使用 Copy 方法。 将工作表对象作为第一个参数传递,将起始位置作为第二个参数传递。 The Copy method retains all styling including font and size, background patterns and colors, and borders and alignment.

:path=/static-assets/excel/content-code-examples/how-to/copy-cells-copy-single-cell.cs
using IronXL;

WorkBook workBook = WorkBook.Load("sample.xlsx");
WorkSheet workSheet = workBook.GetWorkSheet("Sheet1");

// Copy cell content
workSheet["A1"].Copy(workBook.GetWorkSheet("Sheet1"), "B3");

workBook.SaveAs("copySingleCell.xlsx");
using IronXL;

WorkBook workBook = WorkBook.Load("sample.xlsx");
WorkSheet workSheet = workBook.GetWorkSheet("Sheet1");

// Copy cell content
workSheet["A1"].Copy(workBook.GetWorkSheet("Sheet1"), "B3");

workBook.SaveAs("copySingleCell.xlsx");
using IronXL;

WorkBook workBook = WorkBook.Load("sample.xlsx");
WorkSheet workSheet = workBook.GetWorkSheet("Sheet1");

// Copy cell content
workSheet["A1"].Copy(workBook.GetWorkSheet("Sheet1"), "B3");

workBook.SaveAs("copySingleCell.xlsx");
Imports IronXL

Dim workBook As WorkBook = WorkBook.Load("sample.xlsx")
Dim workSheet As WorkSheet = workBook.GetWorkSheet("Sheet1")

' Copy cell content
workSheet("A1").Copy(workBook.GetWorkSheet("Sheet1"), "B3")

workBook.SaveAs("copySingleCell.xlsx")
$vbLabelText   $csharpLabel

复制时保留哪些格式?

Copy 方法保留所有单元格属性,包括:

  • Cell 值和公式
  • 数字格式(货币、百分比、日期)
  • 字体样式(字体、大小、粗体、斜体、颜色)
  • 单元格边框和背景颜色
  • 文本对齐(水平和垂直)
  • 单元格保护设置

这种全面的保存方式可确保复制的单元格保持其原始外观和功能,类似于在 Microsoft Excel 中使用 Ctrl+C 和 Ctrl+V。

电子表格显示选中单元格 A1,箭头指向包含复制值的单元格 B3,演示单个单元格复制

为什么复制方法需要两个参数?

Copy 方法需要两个参数才能进行精确控制:

1.工作表参数:指定目标工作表(工作簿中相同或不同的工作表) 2.地址参数:定义粘贴内容的起始单元格位置

这种设计允许在同一工作表或不同工作表之间灵活复制,非常适合创建汇总报告或整合多个来源的数据。

何时应使用单单元格复制与范围复制?

在以下情况下选择单格复制

  • 复制单个值或公式
  • 复制标题单元格或标签
  • 复制特定的计算结果
  • 使用摘要值

在以下情况下使用范围稿件

  • 移动整个数据表
  • 复制多个相关单元格
  • 复制完整的行或列
  • 保留数据关系

如何复制多个单元格或区域?

Like the Clear method, Copy is available in the Range class, allowing execution on any range size. When selecting ranges, IronXL provides flexible copying options:

-复制单个单元格 (C10) :

  workSheet["C10"].Copy(workBook.GetWorkSheet("Sheet1"), "B13");
  workSheet["C10"].Copy(workBook.GetWorkSheet("Sheet1"), "B13");
workSheet("C10").Copy(workBook.GetWorkSheet("Sheet1"), "B13")
$vbLabelText   $csharpLabel

-复制一列(A)

  workSheet.GetColumn(0).Copy(workBook.GetWorkSheet("Sheet1"), "H1");
  workSheet.GetColumn(0).Copy(workBook.GetWorkSheet("Sheet1"), "H1");
workSheet.GetColumn(0).Copy(workBook.GetWorkSheet("Sheet1"), "H1")
$vbLabelText   $csharpLabel

-复制一行(4)

  workSheet.GetRow(3).Copy(workBook.GetWorkSheet("Sheet1"), "A15");
  workSheet.GetRow(3).Copy(workBook.GetWorkSheet("Sheet1"), "A15");
workSheet.GetRow(3).Copy(workBook.GetWorkSheet("Sheet1"), "A15")
$vbLabelText   $csharpLabel

-复制二维范围 (D6:F8) :

  workSheet["D6:F8"].Copy(workBook.GetWorkSheet("Sheet1"), "H17");
  workSheet["D6:F8"].Copy(workBook.GetWorkSheet("Sheet1"), "H17");
workSheet("D6:F8").Copy(workBook.GetWorkSheet("Sheet1"), "H17")
$vbLabelText   $csharpLabel

请注意第二个参数接受一个地址位置,该地址位置标记数据输入的起始点。 复制的数据将从该地址开始,并向右下方扩展。)

:path=/static-assets/excel/content-code-examples/how-to/copy-cells-copy-cell-range.cs
using IronXL;

WorkBook workBook = WorkBook.Load("sample.xlsx");
WorkSheet workSheet = workBook.GetWorkSheet("Sheet1");

// Copy a single cell(C10)
workSheet["C10"].Copy(workBook.GetWorkSheet("Sheet1"), "B13");

// Copy a column(A)
workSheet.GetColumn(0).Copy(workBook.GetWorkSheet("Sheet1"), "H1");

// Copy a row(4)
workSheet.GetRow(3).Copy(workBook.GetWorkSheet("Sheet1"), "A15");

// Copy a two-dimensional range(D6:F8)
workSheet["D6:F8"].Copy(workBook.GetWorkSheet("Sheet1"), "H17");

workBook.SaveAs("copyCellRange.xlsx");
using IronXL;

WorkBook workBook = WorkBook.Load("sample.xlsx");
WorkSheet workSheet = workBook.GetWorkSheet("Sheet1");

// Copy a single cell(C10)
workSheet["C10"].Copy(workBook.GetWorkSheet("Sheet1"), "B13");

// Copy a column(A)
workSheet.GetColumn(0).Copy(workBook.GetWorkSheet("Sheet1"), "H1");

// Copy a row(4)
workSheet.GetRow(3).Copy(workBook.GetWorkSheet("Sheet1"), "A15");

// Copy a two-dimensional range(D6:F8)
workSheet["D6:F8"].Copy(workBook.GetWorkSheet("Sheet1"), "H17");

workBook.SaveAs("copyCellRange.xlsx");
using IronXL;

WorkBook workBook = WorkBook.Load("sample.xlsx");
WorkSheet workSheet = workBook.GetWorkSheet("Sheet1");

// Copy a single cell(C10)
workSheet["C10"].Copy(workBook.GetWorkSheet("Sheet1"), "B13");

// Copy a column(A)
workSheet.GetColumn(0).Copy(workBook.GetWorkSheet("Sheet1"), "H1");

// Copy a row(4)
workSheet.GetRow(3).Copy(workBook.GetWorkSheet("Sheet1"), "A15");

// Copy a two-dimensional range(D6:F8)
workSheet["D6:F8"].Copy(workBook.GetWorkSheet("Sheet1"), "H17");

workBook.SaveAs("copyCellRange.xlsx");
Imports IronXL

Dim workBook As WorkBook = WorkBook.Load("sample.xlsx")
Dim workSheet As WorkSheet = workBook.GetWorkSheet("Sheet1")

' Copy a single cell(C10)
workSheet("C10").Copy(workBook.GetWorkSheet("Sheet1"), "B13")

' Copy a column(A)
workSheet.GetColumn(0).Copy(workBook.GetWorkSheet("Sheet1"), "H1")

' Copy a row(4)
workSheet.GetRow(3).Copy(workBook.GetWorkSheet("Sheet1"), "A15")

' Copy a two-dimensional range(D6:F8)
workSheet("D6:F8").Copy(workBook.GetWorkSheet("Sheet1"), "H17")

workBook.SaveAs("copyCellRange.xlsx")
$vbLabelText   $csharpLabel

当目标范围太小时会发生什么?

IronXL 可自动处理大小差异:

  • 目标参数仅指定左上角的起始单元格
  • 整个源范围的副本,无论目的地大小
  • 目标区域中的现有数据会被覆盖
  • 复制操作扩展到所有源数据

例如,将 3x3 区域复制到单元格 B1 会填充单元格 B1:D3,覆盖任何现有内容。

行和列引用如何工作?

IronXL使用基于零的行和列索引,并采用 GetRow()GetColumn() 方法:

  • GetColumn(0) 指的是 A 列
  • GetColumn(1) 指的是 B 列
  • GetRow(0) 指的是第 1 行
  • GetRow(3) 指的是第 4 行

该索引符合标准 C# 数组约定。

为什么使用 GetColumn() 和 GetRow() 方法?

GetColumn()GetRow() 方法提供:

  • 性能:整行或整列的效率更高
  • 清晰度:使代码意图更加清晰
  • 灵活性:返回一个支持所有范围操作的 Range 对象
  • 方便:无需计算全选的末尾单元格

在创建需要全列复制的报告或复制行模板时,这些方法表现出色。

Excel 复制操作,显示从源范围 A1:F10 到目标单元格的箭头,并突出显示复制的数据

如何在不同工作表之间复制单元格?

第一个参数接受一个工作表对象,以便在不同工作表之间进行复制和粘贴。 将不同的工作表对象作为第一个参数传递。 This functionality proves essential when managing multiple worksheets or creating summary sheets from detailed data.

在以下示例中,Copy 方法的第一个参数是"Sheet2"工作表:

:path=/static-assets/excel/content-code-examples/how-to/copy-cells-copy-to-other-worksheet.cs
using IronXL;

WorkBook workBook = WorkBook.Load("multisheet.xlsx");
WorkSheet sheet1 = workBook.GetWorkSheet("Sheet1");
WorkSheet sheet2 = workBook.GetWorkSheet("Sheet2");

// Copy entire data range from Sheet1 to Sheet2
sheet1["A1:D10"].Copy(sheet2, "A1");

// Copy with formulas intact
sheet1["E1:E10"].Copy(sheet2, "F1");

// Copy formatting from template sheet
WorkSheet templateSheet = workBook.GetWorkSheet("Template");
templateSheet["A1:Z1"].Copy(sheet2, "A15");

workBook.SaveAs("crossSheetCopy.xlsx");
using IronXL;

WorkBook workBook = WorkBook.Load("sample.xlsx");
WorkSheet workSheet = workBook.GetWorkSheet("Sheet1");

// Copy cell content
workSheet["A1"].Copy(workBook.GetWorkSheet("Sheet2"), "B3");

workBook.SaveAs("copyAcrossWorksheet.xlsx");
using IronXL;

WorkBook workBook = WorkBook.Load("multisheet.xlsx");
WorkSheet sheet1 = workBook.GetWorkSheet("Sheet1");
WorkSheet sheet2 = workBook.GetWorkSheet("Sheet2");

// Copy entire data range from Sheet1 to Sheet2
sheet1["A1:D10"].Copy(sheet2, "A1");

// Copy with formulas intact
sheet1["E1:E10"].Copy(sheet2, "F1");

// Copy formatting from template sheet
WorkSheet templateSheet = workBook.GetWorkSheet("Template");
templateSheet["A1:Z1"].Copy(sheet2, "A15");

workBook.SaveAs("crossSheetCopy.xlsx");
Imports IronXL

Dim workBook As WorkBook = WorkBook.Load("sample.xlsx")
Dim workSheet As WorkSheet = workBook.GetWorkSheet("Sheet1")

' Copy cell content
workSheet("A1").Copy(workBook.GetWorkSheet("Sheet2"), "B3")

workBook.SaveAs("copyAcrossWorksheet.xlsx")

Dim workBook2 As WorkBook = WorkBook.Load("multisheet.xlsx")
Dim sheet1 As WorkSheet = workBook2.GetWorkSheet("Sheet1")
Dim sheet2 As WorkSheet = workBook2.GetWorkSheet("Sheet2")

' Copy entire data range from Sheet1 to Sheet2
sheet1("A1:D10").Copy(sheet2, "A1")

' Copy with formulas intact
sheet1("E1:E10").Copy(sheet2, "F1")

' Copy formatting from template sheet
Dim templateSheet As WorkSheet = workBook2.GetWorkSheet("Template")
templateSheet("A1:Z1").Copy(sheet2, "A15")

workBook2.SaveAs("crossSheetCopy.xlsx")
$vbLabelText   $csharpLabel

哪些是常见的跨工作表复制场景?

跨工作表复制经常适用于这些情况:

1.创建摘要表:将关键指标从明细表复制到仪表板中 2.模板复制:将格式化的模板复制到新的工作表中 3.数据整合:将部门表中的数据收集到主表中 4.报告生成:将过滤后的结果复制到单独的报告工作表中 5.备份操作:将关键数据复制到备份表

When working with formulas that reference other cells, IronXL automatically adjusts relative references based on the new location while maintaining absolute references.

何时复制到新工作表,何时复制到现有工作表?

在以下情况下复制到新工作表:

  • 创建定期报告(日报、周报、月报)
  • 将处理过的数据从原始数据中分离出来
  • 从源数据建立分析工作表
  • 生成用户特定的数据视图

在以下情况下复制到现有工作表:

  • 将数据添加到正在进行的日志中
  • 更新仪表板部分
  • 整合多个数据源
  • 维护历史记录

For complex scenarios involving multiple sheets, consider using IronXL's ability to work with DataSets and DataTables for sophisticated data manipulation.

如何处理工作表命名冲突?

在工作表之间复制时,确保正确的工作表管理:

// Check if worksheet exists before copying
if (workBook.GetWorkSheet("TargetSheet") == null)
{
    workBook.CreateWorkSheet("TargetSheet");
}

// Safe copy operation
WorkSheet targetSheet = workBook.GetWorkSheet("TargetSheet");
sourceSheet["A1:Z100"].Copy(targetSheet, "A1");
// Check if worksheet exists before copying
if (workBook.GetWorkSheet("TargetSheet") == null)
{
    workBook.CreateWorkSheet("TargetSheet");
}

// Safe copy operation
WorkSheet targetSheet = workBook.GetWorkSheet("TargetSheet");
sourceSheet["A1:Z100"].Copy(targetSheet, "A1");
' Check if worksheet exists before copying
If workBook.GetWorkSheet("TargetSheet") Is Nothing Then
    workBook.CreateWorkSheet("TargetSheet")
End If

' Safe copy operation
Dim targetSheet As WorkSheet = workBook.GetWorkSheet("TargetSheet")
sourceSheet("A1:Z100").Copy(targetSheet, "A1")
$vbLabelText   $csharpLabel

这种方法可以防止运行时出错,并确保复制操作成功,在生产环境中实现 Excel 流程自动化时尤为重要。

常见问题解答

如何使用 C# 在 Excel 中复制单个单元格?

使用 IronXL,您可以使用复制方法复制单个单元格。只需选择要复制的单元格(例如,workSheet["A1"]),然后调用复制方法,并将目标工作表和目标单元格地址作为参数传递即可。在复制操作过程中,IronXL 会保留所有格式,包括字体、颜色、边框和公式。

复制单元格时会保留哪些格式?

IronXL 的复制方法可保留所有单元格属性,包括单元格值和公式、数字格式(货币、百分比、日期)、字体样式(字体、大小、粗体、斜体、颜色)、单元格边框和背景颜色、文本对齐方式(水平和垂直)以及单元格保护设置。这可确保复制的单元格保持原有的外观和功能。

能否一次性复制整个列或范围?

是的,IronXL 允许您在一次操作中复制整个列、行或范围。您可以使用 GetColumn(0).Copy() 等方法复制整列,或选择单元格区域一次性复制多个单元格。复制方法适用于任何选择大小,从单个单元格到整个工作表。

如何在不同工作表之间复制单元格?

IronXL 可以方便地在工作表之间复制单元格。使用复制方法时,请将目标工作表指定为第一个参数(例如,workBook.GetWorkSheet("Sheet2")),并将目标单元格地址指定为第二个参数。这样就可以在同一工作簿的不同工作表之间复制数据。

在 Excel 中复制单元格至少需要哪些步骤?

使用 IronXL,复制单元格只需 5 个步骤:1) 下载 IronXL.Excel C# 库;2) 加载现有的 Excel 电子表格;3) 选择要复制的区域、行或列;4) 在选定的区域上调用复制方法;5) 向复制方法传递目标工作表和位置。整个操作只需一行代码即可完成。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

准备开始了吗?
Nuget 下载 1,974,422 | 版本: 2026.4 刚刚发布
Still Scrolling Icon

还在滚动吗?

想快速获得证据? PM > Install-Package IronXL.Excel
运行示例 观看您的数据变成电子表格。