2015-11-18 52 views
2

我正在尝试自动化复制和粘贴数据的过程,但对于我来说保持单元格的格式相同很重要。复制粘贴Powershell Excel保持格式化

我已经尝试过使用PasteSpecial(-4163),但这并没有奏效。奇怪的是,它将一些粗体和其他值变成了非粗体(?)。

这是我为执行复制和粘贴而创建的功能。 有人有什么建议吗?

function CopyPasteRange 
{ 
    #args[0] = sheet 
    #args[1] = row 
    #args[2] = column 

    $range = $args[0].Cells.Item($args[1], ($args[2])).EntireColumn; 
    $range.Copy(); 
    $args[0].Cells.Item(1, $args[2]).PasteSpecial(-4163); 
} 

回答

2

找到解决方案!我删除了PasteSpecial(-4163)中的-4163值,现在用格式和所有内容复制单元格。

我觉得超级特别!

+1

[MSDN info here](https://msdn.microsoft.com/en-us/library/office/ff837425.aspx)。 '-4163'为粘贴值,'-4122'为粘贴格式 – gms0ulman

+0

您最初使用xlPasteValues参数。你想保留公式吗? – Jeeped

+0

啊,解释它!我不确定那个整数在做什么。介意吹。干杯。没有公式。程序将要做的是运行SQL查询以将数据转换为CSV。然后,打开前几周预订新数据(即复制粘贴以前格式化的数据)。来自查询的数据将被创建到查找表中,将结果复制到新创建的格式化单元格中并完成! –

2

根据Range.PasteSpecial methodXlPasteType enumeration您目前正在粘贴值(例如xlPasteValues)。您将不得不使用类似(xlPasteAllUsingSourceTheme)的第二个PasteSpecial操作作为XlPasteType参数。

function CopyPasteRange 
{ 
    #args[0] = sheet 
    #args[1] = row 
    #args[2] = column 

    $range = $args[0].Cells.Item($args[1], ($args[2])).EntireColumn; 
    $range.Copy(); 
    $args[0].Cells.Item(1, $args[2]).PasteSpecial(-4163); 
    $args[0].Cells.Item(1, $args[2]).PasteSpecial(13); 
} 
+0

这将是一种冗余,做2贴不?只需使用正确的'xl'值,否则它只是更多的工作?但是你的解释帮助我理解了我做错了什么:) –

+0

有时候你会想专门复制公式返回的值而不是公式本身。不幸的是,你不能象''xlPasteValues + xlPasteAllUsingSourceTheme''一样将这两个参数加在一起,就像你可以用一些更多的位参数一样。如果复制和粘贴是需要的,那么PasteSpecial甚至不需要,因为[Range.Copy方法](https://msdn.microsoft.com/zh-cn/library/office/ff837760.aspx)一个可选的目标参数。 – Jeeped