2017-12-11 3 views
0

私は単純なアドインを使って範囲をコピーし、それを別の場所に貼り付けます。今Excelの範囲をコピーしてもセルのサイズを維持する

var excel = Marshal.GetActiveObject("Excel.Application") as Excel.Application; 

int index = Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet.Index; 

Excel.Worksheet activeSheet = excel.Worksheets[index] as Excel.Worksheet; 
Excel.Worksheet newSheet = excel.Worksheets.Add(); 

Excel.Range toCopy = activeSheet.UsedRange; 
toCopy.Copy(); 
Excel.Range range = newSheet.Cells[1, 1] as Excel.Range; 
range.Select(); 
newSheet.Paste(); 

私がコピーしている間にセルサイズを維持し、それらを貼り付けることができるか:セルサイズをデフォルトにリセットもらうことを除いてすべてが

これは、この操作を担当するスニペットがある...、意図のように動作します?

+0

'xlPasteAll'でその' range'インスタンスの[PasteSpecial](https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.range.pastespecial.aspx)を試しましたか?最初の議論として? – rene

+0

newSheet.Paste();行を変更します。をnewSheet.PasteSpecial(Excel.XlpasteType.xlPasteAll)に設定します。私は今System.Runtime.InteropServices.COMExceptionを実行します: 'HRESULTからの例外:0x800A03EC'例外。以前はpasteSpecialを使用していませんでしたが、ここで何か不足している可能性があります。 –

+1

ワークシート・タイプのPasteSpecialは、RangeのPasteSpecialと異なります。そのため、私はrange.PasteSpecial(xlPasteAll、/ *必要に応じて他の引数を追加する* /)のように 'range 'で明示的に呼び出していると言います。 – rene

答えて

0

何らかの理由でxlPasteAllは、セル幅では動作しませんので、私はそれらの2

range.PasteSpecial(Excel.XlPasteType.xlPasteColumnWidths); 
range.PasteSpecial(Excel.XlPasteType.xlPasteAll); 

でラインに

newSheet.Paste(); 

を交換し、今では動作します。

関連する問題