使用Clipboard.GetText()粘贴Excel.Range.Copy()

时间:2013-01-25 20:02:00

标签: c# excel text-files clipboard copy-paste

我有一小段C#代码,其中我试图在Excel文件中循环工作表将UsedRange 复制到剪贴板< / strong>并粘贴将其添加到文本文件

到目前为止我的代码似乎没有丢失任何错误,但由于某种原因,什么都没有写入我的文本文件。我错过了什么吗?如果我将System.Reflection.Missing.Value作为Copy方法的参数包含在内,那么仍然没有任何反应。

这是我的代码:

using (StreamWriter sw = File.CreateText("ExtractedText.txt"))
{
     foreach (Excel.Worksheet sheet in thisWkBook.Worksheets)
     {
         sheet.UsedRange.Copy();
         sw.Write(Clipboard.GetText());
     }                    
}

编辑#1:我怀疑某些引用肯定已经破坏了我的小应用程序,因为如果我创建一个新的C#项目,Haxx建议的代码段就可以了。但是如果我使用来自Haxx的相同代码并插入我的小应用程序中作为一种新方法,它就不起作用,即使它是完全相同的代码与完全相同的“使用”库被调用...我将只是重做整个应用程序,复制/粘贴代码中最重要的部分,并报告是否可以解决问题。

编辑#2:我相信我认为问题是什么。我忘了提到我正在使用BackgroundWorker(System.ComponentModel.BackgroundWorker),以便在运行这个小进程时可以显示进度条。我刚看到你显然只能从STAThread(Clipboard.GetText returns null (empty string))访问剪贴板。所以我继续创建了一个单独的方法,它没有使用BackgroundWorkers,因此它在STAThread上运行,瞧!代码正确且功能正常,但如果从BackgroundWorker线程调用异步,则尝试访问剪贴板将无法正常工作。

1 个答案:

答案 0 :(得分:2)

我制作了一个excel文件,其中第一张工作表包含单元格中的值A1 ='a',B1 ='b',A2 ='c',B2 ='d'

代码简化为以下内容:

        Application appExl = new Application();
        Workbook workbook;

        //Opening Excel file(myData.xlsx)
        workbook = appExl.Workbooks.Open(
            @"c:\apps\book1.xlsx",
            Missing.Value,
            Missing.Value,
            Missing.Value,
            Missing.Value,
            Missing.Value,
            Missing.Value,
            Missing.Value,
            Missing.Value,
            Missing.Value,
            Missing.Value,
            Missing.Value,
            Missing.Value,
            Missing.Value,
            Missing.Value);


        Worksheet sheet = workbook.Sheets.get_Item(1);
        sheet.UsedRange.Copy();
        var a = Clipboard.GetText();

a现在包含“a \ tb \ r \ nc \ td \ r \ n”