Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Excel.Range.Copy()使用剪贴板粘贴。GetText()_C#_Excel_Text Files_Clipboard_Copy Paste - Fatal编程技术网

C# Excel.Range.Copy()使用剪贴板粘贴。GetText()

C# Excel.Range.Copy()使用剪贴板粘贴。GetText(),c#,excel,text-files,clipboard,copy-paste,C#,Excel,Text Files,Clipboard,Copy Paste,我有一段小小的C代码,我试图在Excel文件中循环工作表,将UsedRange复制到剪贴板,然后粘贴到文本文件中 到目前为止,我的代码似乎没有抛出任何错误,但出于某种原因,我的文本文件中根本没有写入任何内容。我错过什么了吗?如果我将System.Reflection.Missing.Value作为复制方法的参数,仍然不会发生任何事情 这是我的密码: using (StreamWriter sw = File.CreateText("ExtractedText.txt")) { fore

我有一段小小的C代码,我试图在Excel文件中循环工作表,将UsedRange复制到剪贴板,然后粘贴到文本文件中

到目前为止,我的代码似乎没有抛出任何错误,但出于某种原因,我的文本文件中根本没有写入任何内容。我错过什么了吗?如果我将
System.Reflection.Missing.Value
作为复制方法的参数,仍然不会发生任何事情

这是我的密码:

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()访问剪贴板。所以我继续创建了一个单独的方法,它不使用任何BackgroundWorkers,因此它在STAThread上运行,瞧!代码正确且功能正常,但如果从BackgroundWorker线程异步调用剪贴板,则尝试访问剪贴板将无效。

我创建了一个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”

是否必须通过复制到剪贴板?因为我可以发布一个如何从excel文件中检索内容的示例哦,我现在有两个其他方法可以使用,一个是逐单元格提取值,另一个是逐页保存为文本文件。我想做的是比较这三种方法,包括这个“复制”方法,看看哪一种更快/效率最高。我会用我在这里得到的答案来回答。看来你所做的应该有用。这很奇怪。我刚刚打开了一个新的C#实例来测试您的代码,它确实可以工作。我甚至在文本文件中添加了写入位,它也可以工作。。。我只是不知道为什么它在我上面发布的代码中不起作用。