3

タイトルにあるように、クリップボードにあるものを実際にExcelに貼り付けようとしています。

私は次のコードを持っています:

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

実際、変数htmlにはhtmlコードファイルが含まれています。そのようにすると、実際にはhtmlコンテンツのみが範囲に貼り付けられますが、Excelを開いて手動で行うと、[形式を選択して貼り付け...]でhtmlを貼り付けることができます。コードですが、コードをhtmlコードではなく実際のテーブルに変換します。これは、手作業を行わなくても、私が望む実際の結果です。

Excel.Range.Copy()を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->画像を使用して画像を貼り付けることはできますが、画像ではなく実際の値にアクセスできる必要があります。

誰かがそれを解決する方法を明確にできることを願っています。

ありがとう。

4

5 に答える 5

3

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プロパティを使用してセルに新しい値を割り当てると、フォーマットなどがコピーされないことに注意してください。

于 2013-03-27T08:56:48.467 に答える
1

これを使用します: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();
于 2015-09-04T12:48:09.587 に答える
1

クリップボードからコピーしたセルを使用して取得することができました

    Clipboard.GetData("XML Spreadsheet");

次に、コードをコピーして貼り付けた後、次のように戻します。

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

ハッピーコーディング!

于 2016-05-23T14:07:26.677 に答える
1

私の単純なC#コピー&ペースト(入力/シート[1]から出力/シート[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);
于 2019-02-28T11:30:10.103 に答える
0

このコードは、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();
}

于 2018-03-14T11:11:43.860 に答える