Excel区域赋值后,区域的格式无法立即显示的解决方案

今天接到一个技术QA,说是把excel中一个区域的格式设置成yyyy/MM/dd hh:mm,然后把格式是yyyy/MM/dd hh:mm:ss的数据填充进去,但是格式没有立即变化,必须逐个单元格双击,才能变成其设置的格式。试来试去,发现了一个方法。首先,把原始数据放到一块空白的无用的区域中,然后用PasteSpecial方法来粘贴到目标区域,然后在删除这个临时的数据区域。这样就能达到数据立刻能转变成所在单元格的格式了。PasteSpecial(XlPasteType.xlPasteValues, XlPasteSpecialOperation.xlPasteSpecialOperationAdd, false, false);

主要是得把参数一设置成只粘贴值,第二个参数设置成加运算。其实这个方法就是对应你在EXCEL中右键-〉选择性粘贴,弹出的对话框里那些选项就是对应了方法中的各个位置的参数。

如果使用Paste方法的话就是把原数据的格式和值都粘贴过来。

NamedRange.PasteSpecial 方法

 

将剪贴板上 Microsoft.Office.Interop.Excel.Range 对象的内容粘贴到 NamedRange 控件中。

命名空间:  Microsoft.Office.Tools.Excel
程序集:  Microsoft.Office.Tools.Excel.v9.0(在 Microsoft.Office.Tools.Excel.v9.0.dll 中)

复制
public Object PasteSpecial(
	XlPasteType Paste,
	XlPasteSpecialOperation Operation,
	Object SkipBlanks,
	Object Transpose
)

参数

Paste
类型:Microsoft.Office.Interop.Excel.XlPasteType

范围中要粘贴的部分。

可以是下列 XlPasteType 值之一:

  • xlPasteAll

  • xlPasteAllExceptBorders

  • xlPasteColumnWidths

  • xlPasteComments

  • xlPasteFormats

  • xlPasteFormulas

  • xlPasteFormulasAndNumberFormats

  • xlPasteValidation

  • xlPasteValues

  • xlPasteValuesAndNumberFormats

Operation
类型:Microsoft.Office.Interop.Excel.XlPasteSpecialOperation

粘贴操作。

可以是下列 XlPasteSpecialOperation 值之一:

  • xlPasteSpecialOperationAdd

  • xlPasteSpecialOperationDivide

  • xlPasteSpecialOperationMultiply

  • xlPasteSpecialOperationNone

  • xlPasteSpecialOperationSubtract

SkipBlanks
类型:System.Object

如果不将剪贴板上该范围中的空单元格粘贴到目标范围,则为 true。默认值为 false

Transpose
类型:System.Object

如果在粘贴该范围时对行和列进行转置,则为 true。默认值为 false

返回值

类型:System.Object
备注

示例

下面的代码示例使用 Copy 方法将名为 NamedRange1NamedRange 控件的内容复制到剪贴板,然后使用 PasteSpecial 方法将这些内容粘贴到名为 NamedRange2NamedRange 控件中。将 Operation 参数设置为 xlPasteSpecialOperationAdd,以便将 NamedRange1 中每个单元格的内容添加到 NamedRange2 中相应的单元格。

此示例针对的是文档级自定义项。

C#
VB
private void CopyAndPasteSpecialRange()
{
    Microsoft.Office.Tools.Excel.NamedRange namedRange1 =
        this.Controls.AddNamedRange(this.Range["A1", "A3"],
        "namedRange1");
    namedRange1.Value2 = 22;

    Microsoft.Office.Tools.Excel.NamedRange namedRange2 =
        this.Controls.AddNamedRange(this.Range["C1", "C3"],
        "namedRange2");
    namedRange2.Value2 = 5;

    // Copy the contents of namedRange1 to the clipboard, and then
    // paste the contents into namedRange2, adding each to
    // the value in namedRange2.
    namedRange1.Copy(missing);
    namedRange2.PasteSpecial(Excel.XlPasteType.xlPasteAll,
        Excel.XlPasteSpecialOperation.xlPasteSpecialOperationAdd,
        false,
        false);
}


原文地址:https://www.cnblogs.com/renfeng/p/2530801.html