在C#vsto Excel中特别粘贴

我正在使用C#vsto Excel应用程序。

每当用户从另一个excel表单中粘贴excel模板中的东西时,它也会将单元格格式与excel模板中的单元格数据一起粘贴。 我想避免这一点。 所以我GOOGLE了,我遇到了术语贴特别。

特殊粘贴只会粘贴内容,不会改变当前表格的格式。

我想在我的vsto应用程序中引入粘贴特殊选项。

我在这里有代码,

Application.OnKey("^v", "PasteSpecV"); 

但它不工作…任何人可以帮助我呢?

  1. http://globalmousekeyhook.codeplex.com/下载dll
  2. 添加引用MouseKeyboardActivityMonitor.dll

      private KeyboardHookListener k_keyListener; private void ThisWorkbook_Startup(object sender, System.EventArgs e) { k_keyListener = new KeyboardHookListener(new AppHooker()); k_keyListener.Enabled = true; k_keyListener.KeyDown += new KeyEventHandler(k_keyListener_KeyDown); } void k_keyListener_KeyDown(object sender, KeyEventArgs e) { if (Control.ModifierKeys == Keys.Control) if (e.KeyCode == Keys.V) { Worksheet actSht = ActiveSheet as Worksheet; Range rng = actSht.Application.Selection as Range; if (MessageBox.Show("You are about to paste values only. Do you want to continue?", "Paste Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { rng.PasteSpecial(XlPasteType.xlPasteValues, XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false); } e.Handled = true; } } 

经过大量的search和尝试和错误的方法,我终于设法做“特殊粘贴” 。 我正在工作的工作表,我已经在名为commonData的类中作为静态工作表进行了删除

 class CommonData { public static Worksheet DATASHEET; } 

之后,我在ThisWorkbook.cs中使用该工作表

ThisWorkbook启动,我用VBA Function Paste_cellreplace了PASTE(^ v)

  private void ThisWorkbook_Startup(object sender, System.EventArgs e) { // replacing paste by macro function Paste_cell CommonData.DATASHEET.Application.OnKey("^v", "Paste_cell"); } 

打开你正在工作的Excel工作表, 按ALT + F11即VBAmacros编辑器。

工具>>macros>>创build新macros ,它将在Project Explorer中创build模块1,将以下代码粘贴到模块1中

 Sub Paste_cell() If MsgBox("You are about to Paste only Values and not the format, proceed?", vbQuestion + vbOKCancel, GSAPPNAME) = vbOK Then On Error Resume Next ActiveSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:=False Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End If End Sub 

现在,如果您从任何Excel表格复制粘贴任何值,它将只粘贴单元格数据,不会粘贴其Format.It将提示以下消息以提醒用户。 所以原始格式不会改变。

干杯,:-)

我使用以下代码在VSTO 2010中仅使用PasteSpecial复制粘贴值和格式

  Excel.Worksheet lastSheet = Application.ActiveSheet; Excel.Workbook wb = Application.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet); for (int i = this.Worksheets.Count; i >= 1; i--) { Excel.Worksheet source = this.Worksheets[i]; source.Activate(); Application.Cells.Select(); Application.Selection.Copy(); Excel.Worksheet sheet = wb.Worksheets.Add(); sheet.Activate(); Application.Selection.PasteSpecial(Excel.XlPasteType.xlPasteValues); Application.Selection.PasteSpecial(Excel.XlPasteType.xlPasteFormats); sheet.Name = source.Name; sheet.Range["A1"].Select(); Clipboard.Clear(); } lastSheet.Activate(); lastSheet.Range["A1"].Select(); wb.SaveAs(fileName); wb.Close(); 

行Clipboard.Clear()与VBA CutCopyMode = False相同,以取消select要复制的内容。