|
■No81958 (魔界の仮面弁士) に追記 >>セルの背景色やフォントカラーなど、他の属性も扱うことはできないでしょうか。 > > そのためのインターフェイスは、Clipboard 経由で > ペーストする方法だけだと思います。 > Range.PasteSpecial とか Worksheet.Paste とか。
Range.PasteSpecial なサンプルを書いておきます。
セル A1:D6 の範囲(source) の6行4列分の書式情報を、 セル A11:H34 の範囲(destination) の24行8列に、 一括転記しています。
xlPasteFormats を指定しているため、書式情報のみ転記され、 コピー先にあった値や数式はそのまま保持されます。
static void Main() { // dynamic app = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application")); Excel.Application app = new Excel.Application(); app.Visible = true; // dynamic books = app.Workbooks; Excel.Workbooks books = app.Workbooks; // dynamic book = books.Add(@"C:\temp\Book2007.xlsx"); Excel.Workbook book = books.Add(@"C:\temp\Book2007.xlsx"); // dynamic worksheets = book.Worksheets; Excel.Sheets worksheets = book.Worksheets; // dynamic sheet1 = worksheets["Sheet1"]; Excel.Worksheet sheet1 = worksheets["Sheet1"]; // dynamic cells = sheet1.Cells; Excel.Range cells = sheet1.Cells; // dynamic lt, rb, source = sheet1.Range[lt = cells[1, 1], rb = cells[6, 4]]; Excel.Range lt, rb, source = sheet1.Range[lt = cells[1, 1], rb = cells[6, 4]]; // dynamic destination = sheet1.Range["A11:H34"]; Excel.Range destination = sheet1.Range["A11:H34"];
source.Copy(); // destination.PasteSpecial((object)/*xlPasteFormats*/-4122); destination.PasteSpecial(Excel.XlPasteType.xlPasteFormats); // app.CutCopyMode = false; app.CutCopyMode = default(Excel.XlCutCopyMode);
Release(ref destination); Release(ref source); Release(ref rb); Release(ref lt); Release(ref cells); Release(ref sheet1); Release(ref worksheets); book.SaveAs(@"C:\temp\newBook.xlsx"); Release(ref book); Release(ref books); app.Quit(); Release(ref app); }
static int Release<T>(ref T obj, bool force = false) where T : class { int refCount = 0; if (obj != null && Marshal.IsComObject(obj)) { if (force) refCount = Marshal.FinalReleaseComObject(obj); else refCount = Marshal.ReleaseComObject(obj); obj = null; } return refCount; }
|