C#将剪贴板内容粘贴到Excel工作表中

时间:2013-03-27 08:39:08

标签: c# excel clipboard worksheet-function

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

我已经关注了代码:

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

实际上,变量html包含一个html代码文件,当我这样做时,我实际上只将html内容粘贴到Range中,但是,如果我打开Excel并手动执行,请选择Paste Special ...我可以粘贴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做 - >>图像和粘贴图像,但实际值应该是可访问的而不是图片。

希望有人能澄清如何解决它。

感谢。

5 个答案:

答案 0 :(得分:2)

您可以尝试使用SetData代替SetText

 Clipboard.SetData(DataFormats.Html, html);

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

考虑到您的评论,请求PasteSpecial针对您希望插入的单元格区域的调用:

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

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

答案 1 :(得分:1)

我简单的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);

答案 2 :(得分:0)

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

//下面是完整的代码

SELECT ID FROM Log 
WHERE Worker_Name='$nameW' and Employer_Name='$nameE' ORDER BY ID DESC LIMIT 1

答案 3 :(得分:0)

我设法通过

从剪贴板中获取复制的单元格
    Clipboard.GetData("XML Spreadsheet");

然后,在我通过我的代码进行了一些复制粘贴后,我将其放回

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

快乐的编码!

答案 4 :(得分:0)

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



implode(PHP_EOL, $matches[0]);