在C#vsto Excel中特别粘贴
我正在使用C#vsto Excel应用程序。
每当用户从另一个excel表单中粘贴excel模板中的东西时,它也会将单元格格式与excel模板中的单元格数据一起粘贴。 我想避免这一点。 所以我GOOGLE了,我遇到了术语贴特别。
特殊粘贴只会粘贴内容,不会改变当前表格的格式。
我想在我的vsto应用程序中引入粘贴特殊选项。
我在这里有代码,
Application.OnKey("^v", "PasteSpecV");
但它不工作…任何人可以帮助我呢?
- 从http://globalmousekeyhook.codeplex.com/下载dll
-
添加引用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要复制的内容。
- 如何使用VBA在Excel工作表中的现有形状后面粘贴形状?
- 如何将一张表中的一列复制到另一张表中的另一列,同时跳过空白单元格?
- 根据表1中的非零值复制Sheet 1中某些行的特定单元格到Sheet 2的最后一个空行
- 在VBA复制粘贴过程中导致运行时错误1004的“Application.Calculation = xlCalculationManual”语句
- 将Excel的RangeSelection复制到Windows应用程序中的数组
- 复制工作簿中的列,粘贴第二个工作簿的第二个工作表openPyXL
- 将值粘贴到dynamic范围excel vba中
- 有条件地将行移动到另一个工作表中
- 将特定单元格从EXCEL复制并粘贴到特定的SPSS单元格中