【问题标题】:C# Paste Clipboard content into Excel worksheetC# 将剪贴板内容粘贴到 Excel 工作表中
【发布时间】:2013-03-27 08:39:08
【问题描述】:

正如标题所说,我尝试将剪贴板中的内容实际粘贴到 Excel 中。

我有以下代码:

Clipboard.SetText(html);
sheet.Range("A1").Value = Clipboard.GetText(); 

实际上,变量 html 包含一个 html 代码文件,当我这样做时,我实际上只将 html 内容粘贴到 Range 中,但是,如果我打开 Excel 并手动执行,选择性粘贴...我可以粘贴 html 代码,但它会将代码转换为真实表格而不是 html 代码,这是我想要的真实结果,无需手动操作。

Excel.Range.Copy() paste with Clipboard.GetText()

另一种方法是:

foreach (Excel.Worksheet sheet in workbook.Sheets)
{
    foreach (Excel.Shape shape in sheet.Shapes)
    {
        Clipboard.SetText(html);

        //doesn't work:                              
        sheet.Range("A1").Value = sheet.PasteSpecial(Clipboard.GetText()); 

        sheet.PasteSpecial(Clipboard.GetText()); //throws error
    }
}

但是这种方式也行不通。我可以使用 html -> 图像并粘贴图像,但应该可以访问实际值而不是图片。

希望有人能说明如何解决。

谢谢。

【问题讨论】:

标签: c# excel clipboard worksheet-function


【解决方案1】:

您可以尝试使用SetData 而不是SetText

 Clipboard.SetData(DataFormats.Html, html);

将字符串复制到剪贴板并将其标记为 HTML(如果这在您的情况下不起作用,SetText 可能没问题)。

调用PasteSpecial 获取您希望插入的单元格范围,同时考虑到您的 cmets:

ActiveSheet.Range("A1").PasteSpecial(
         Excel.Enums.XlPasteType.xlPasteAll,
         Excel.Enums.Xl‌​PasteSpecialOperation.xlPasteSpecialOperationNone,
         false, false);

请注意,使用Value 属性从不为单元格分配新值会复制任何格式等。

【讨论】:

  • 我正在考虑这种方式,但它仍然给我一个异常,我使用的是 NetOffice 而不是 Microsoft.Office 库,这就是原因,因为我可以只做一个不带参数的 .PasteSpecial。我将在那里等待管理员的回复,询问它是否可能是程序集问题或错误的实现。它似乎与编译: sheet.Range("A1").PasteSpecial(Excel.Enums.XlPasteType.xlPasteAll,Excel.Enums.XlPasteSpecialOperation.xlPasteSpecialOperationAdd,false, false);但仍然会出现一些异常错误。
  • 我是用 xlPasteSpecialOperationAdd 做的,因为我已经有来自模板的现有值......并且想要从以前的现有值进行计算,如果我将它保留为 xlPasteSpecialOperationNone,旧值会保留,但仍然得到一个异常错误。阅读了 RTFM,因为您甚至给了我正确的操作。
  • 仅用于复制它适用于 Clipboard.SetText(html); sheet.Range("A1").PasteSpecial();他不喜欢 Clipboard.SetData(DataFormats.Htlm, html);
  • @mike27015:好的,相应地改变了我的答案。
【解决方案2】:

我设法通过使用从剪贴板中获取复制的单元格

    Clipboard.GetData("XML Spreadsheet");

然后,在我对我的代码进行了一些复制粘贴之后,我把它放回去了

    Clipboard.SetData("XML Spreadsheet", originalObject);

编码愉快!

【讨论】:

    【解决方案3】:

    使用这个: xlWorkSheet.PasteSpecial(Missing.Value, false, false, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

    //下面是完整代码

                Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
                Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
    
                Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
                xlApp.Visible = true;
                xlApp.UserControl = true;
                xlApp.WindowState = Excel.XlWindowState.xlMaximized;
                xlWorkBook = xlApp.Workbooks.Add(Type.Missing);
               // xlWorkBook = xlApp.Workbooks.Open(excel_filename);
                xlApp.ActiveWorkbook.Sheets[1].Activate();
                xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
                xlWorkSheet.PasteSpecial(Missing.Value, false, false, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                xlWorkBook.SaveAs(save_file_name);
                Console.WriteLine("saved file name" + save_file_name);
                xlWorkBook.Close();
                xlApp.Quit();
    

    【讨论】:

      【解决方案4】:

      我的简单 C# 复制和粘贴(从 Input/Sheet[1] 到 Output/Sheet[1])

      using System.Reflection;
      using System.Runtime.InteropServices;
      using Excel = Microsoft.Office.Interop.Excel;
      
      // prepare Input
              Excel.Application xlApp = new Excel.Application();
              xlApp.DisplayAlerts = false;
              Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(fileNameIn);
              Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
              Excel.Range xlRange = xlWorksheet.UsedRange;      //I copy everything
      // prepare Output
              Excel.Application oXL = new Excel.Application();
              oXL.DisplayAlerts = false;
              Excel.Workbook mWorkBook = oXL.Workbooks.Open(fileNameOut, 0, false, 5,
                                      "", "", false, Excel.XlPlatform.xlWindows,
                                      "", true, false, 0, true, false, false);
              Excel.Worksheet mWSheet1 = mWorkBook.Sheets[1];
      // make Copy&Paste in PC memory
              xlRange.Copy(Type.Missing);
              Excel.Range targetRange = mWSheet1.Cells[11, 1];   //initial cell for Paste
              mWSheet1.Paste(targetRange);
      // save Output
              mWorkBook.SaveAs(fileNameOut, Excel.XlFileFormat.xlWorkbookNormal, 
                                      Missing.Value, Missing.Value,
                                      Missing.Value, Missing.Value,  
                                      Excel.XlSaveAsAccessMode.xlExclusive,
                                      Missing.Value, Missing.Value,
                                      Missing.Value, Missing.Value, Missing.Value);
      // clean the waste !
              mWorkBook.Close(Missing.Value, Missing.Value, Missing.Value);
              mWSheet1 = null; mWorkBook = null; oXL.Quit();
              GC.WaitForPendingFinalizers(); GC.Collect(); GC.WaitForPendingFinalizers();
              GC.Collect(); GC.WaitForPendingFinalizers();
              Marshal.ReleaseComObject(xlRange); Marshal.ReleaseComObject(xlWorksheet);
              xlWorkbook.Close(); Marshal.ReleaseComObject(xlWorkbook);
              xlApp.Quit(); Marshal.ReleaseComObject(xlApp);
      

      【讨论】:

        【解决方案5】:

        此代码用于将 html 字符串转储到 excel 中

        using Microsoft.Office.Interop.Excel;
        
        private void ExcelExport()
        {
            var excel = new Application { Visible = true };
            excel.WindowState = XlWindowState.xlMaximized;
            Workbook workbook = excel.Workbooks.Add(XlSheetType.xlWorksheet);
            Worksheet sheet = workbook.Sheets[1];
            sheet.Activate();
        
            string s = "<html><body><table>";
        
            for (int i = 1; i <= 100; i++)
            {
                s += "<tr>";
        
                for (int f = 1; f <= 100; f++)
                {
                    s += "<td>" + i.ToString() + "," + f.ToString() + "</td>";
                }
        
                s += "</tr>";
            }
        
            s += "</table></body></html>";
        
            System.Windows.Forms.Clipboard.SetText(s);
        
            sheet.Range["A1"].Select();
            sheet.PasteSpecial(Type.Missing, false, false, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            sheet.Range["A1"].Select();
        }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-10
          • 2013-12-06
          • 2015-07-29
          • 2017-02-19
          • 2013-05-16
          • 1970-01-01
          相关资源
          最近更新 更多