今天接到一个技术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 方法将名为 NamedRange1 的 NamedRange 控件的内容复制到剪贴板,然后使用 PasteSpecial 方法将这些内容粘贴到名为 NamedRange2 的 NamedRange 控件中。将 Operation 参数设置为 xlPasteSpecialOperationAdd,以便将 NamedRange1 中每个单元格的内容添加到 NamedRange2 中相应的单元格。
此示例针对的是文档级自定义项。
{
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);
}