報表開發常需將第一張工作表的表頭或樣板區域複製到其他工作表。Excel 物件模型提供 Range.Copy 方法可一次複製內容與格式;若僅需複製純文字,則可搭配 Windows 剪貼簿實現。本文詳細示範兩種模式的用法與差異。
Excel.Application app = new Excel.Application();
Excel.Workbook wb = app.Workbooks.Open(@"Z:\Book1.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
app.DisplayAlerts = false;
Excel.Worksheet srcSheet = (Excel.Worksheet)wb.Worksheets.get_Item(1);
Excel.Range srcRange = srcSheet.get_Range("A1", Type.Missing);
srcRange.Value = "123";
Excel.Worksheet destSheet = (Excel.Worksheet)wb.Worksheets.get_Item(2);
Excel.Range destRange = destSheet.get_Range("B1", Type.Missing);
// 核心:來源範圍呼叫 Copy,目標範圍作為參數
srcRange.Copy(destRange);
wb.SaveAs(@"Z:\Book2.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
// ... 釋放資源 ...
特點:一次複製數值、公式、字型、邊框、填充、欄寬列高等所有屬性。適合複製表頭樣板、整表複製。
Excel.Worksheet srcSheet = (Excel.Worksheet)wb.Worksheets.get_Item(1);
Excel.Range srcRange = srcSheet.get_Range("A1", Type.Missing);
srcRange.Value = "123";
// 將數值放入剪貼簿
System.Windows.Forms.Clipboard.SetDataObject(srcRange.Value.ToString());
Excel.Worksheet destSheet = (Excel.Worksheet)wb.Worksheets.get_Item(2);
Excel.Range destRange = destSheet.get_Range("B1", Type.Missing);
// 貼上純文字
destSheet.Paste(destRange, false);
限制:Clipboard.SetDataObject 僅支援單一儲存格字串,無法一次複製多儲存格區域。適合單一數值傳遞、避免格式汙染目標工作表。
Range.Copy(destRange)。Paste。Range.Value = object[,],效能遠優於逐儲存格或複製貼上。掌握這兩種複製策略,能靈活應對報表開發中各式跨工作表資料佈放需求。