如何使用 IronXL 複製儲存格

如何使用 IronXL 在 C# 中複製儲存格

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

IronXL 透過單一 Copy 方法,讓您能在 Excel 試算表中複製儲存格、範圍、列或欄,並在任何位置或工作表之間複製資料時,完整保留所有格式與樣式。

"複製儲存格"功能會複製儲存格內容,並將其貼上至其他儲存格。 它會複製工作表中的資料、公式、格式及其他屬性。 Whether creating spreadsheets from scratch or loading existing Excel files, the copy functionality is essential for efficient data manipulation.

快速入門:在一行內複製欄位或範圍

透過單一方法呼叫,即可將整個範圍(單一儲存格、列、欄或區塊)從一個工作表複製到另一個工作表。 Copy 函式在保留樣式與格式的同时,能讓 Excel 自動化操作變得快速且簡單。

  1. using 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 方法需要兩個參數?

Copy 方法需要兩個參數以實現精確控制:

  1. 工作表參數:指定目標工作表(可為同一工作簿內或不同工作簿中的工作表)
  2. Address 參數:定義貼上內容的起始儲存格位置

此設計允許在同一工作表內或跨不同工作表進行靈活複製,非常適合製作摘要報告或整合來自多個來源的資料。

何時該使用單一儲存格複製,何時該使用範圍複製?

請在以下情況選擇單元格複製:

  • 複製個別數值或公式
  • 複製標題儲存格或標籤
  • 複製特定的計算結果
  • 處理摘要值

請在以下情況使用範圍描述:

  • 移動整個資料表
  • 複製多個相關儲存格
  • 複製整行或整列
  • 保留資料關聯性

如何複製多個儲存格或範圍?

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 會自動處理大小差異:

  • destination 參數僅指定左上角的起始儲存格
  • 無論目標區域大小如何,都會複製整個來源範圍
  • 目標區域中的現有資料將被覆寫
  • 複製操作會擴展以涵蓋所有原始資料

例如,將 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"工作表: workBook.GetWorksheet("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,您可以使用 Copy 方法複製單一儲存格。只需選取要複製的儲存格(例如 workSheet["A1"]),並呼叫 Copy 方法,同時將目標工作表和目標儲存格位址作為參數傳入。在複製操作過程中,IronXL 會保留所有格式設定,包括字型、顏色、邊框和公式。

複製儲存格時會保留哪些格式?

IronXL 的 Copy 方法會保留所有儲存格屬性,包括儲存格值與公式、數字格式(貨幣、百分比、日期)、字型樣式(字體、大小、粗體、斜體、顏色)、儲存格邊框與背景顏色、文字對齊方式(水平與垂直),以及儲存格保護設定。這確保複製後的儲存格能維持其原始外觀與功能。

我可以一次複製整個欄位或範圍嗎?

是的,IronXL 允許您透過單一操作複製整個欄位、列或範圍。您可以使用 GetColumn(0).Copy() 等方法來複製整個欄位,或選取一組儲存格以一次複製多個儲存格。Copy 方法適用於任何選取範圍,從單一儲存格到整個工作表皆可。

如何在不同工作表之間複製儲存格?

IronXL 讓您能輕鬆地在工作表之間複製儲存格。使用 Copy 方法時,請將目標工作表指定為第一個參數(例如:workBook.GetWorkSheet("Sheet2")),並將目標儲存格位址指定為第二個參數。這讓您能夠在同一工作簿內的不同工作表之間複製資料。

在 Excel 中複製儲存格至少需要哪些步驟?

using IronXL 複製儲存格僅需 5 個步驟:1) 下載 IronXL C# 程式庫,2) 載入現有的 Excel 試算表,3) 選取要複製的範圍、列或欄,4) 對選取的範圍呼叫 Copy 方法,以及 5) 將目標工作表和位置傳遞給 Copy 方法。整個操作只需一行程式碼即可完成。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 Node.js、TypeScript、JavaScript 及 React。他熱衷於打造直觀且美觀的用戶介面,喜歡運用現代框架,並創建結構完善、視覺上吸引人的手冊。

除了開發工作之外,Curtis 對物聯網(IoT)抱有濃厚興趣,致力於探索整合硬體與軟體的創新方法。閒暇時,他喜歡玩遊戲和開發 Discord 機器人,將對科技的熱愛與創意相結合。

準備開始了嗎?
Nuget 下載 2,052,917 | 版本: 2026.6 just released
Still Scrolling Icon

還在捲動嗎?

想要快速證明? PM > Install-Package IronXL.Excel
執行範例 觀看您的資料變成試算表。