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

我有一小段C#代码,我试图通过 Excel文件中的工作表循环将UsedRange复制剪贴板 并将粘贴文本文件中

我到目前为止的代码似乎工作没有任何错误,但由于某种原因,一点都没有写入我的文本文件。 我错过了什么吗? 如果我包含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:我怀疑某种参考必须打破我的小应用程序,因为如果我创build一个新的C#项目Haxxbuild议的代码段工作。 但是,如果我使用Haxx中的相同代码并作为新的方法插入到我的小应用程序中,即使它与完全相同的“使用”库被调用完全相同的代码,也是行不通的。重做整个应用程序,复制/粘贴代码的最重要的部分,并报告,如果这可以解决问题。

编辑#2:我相信我认为是什么问题。 我忘了提到我正在使用BackgroundWorker( System.ComponentModel.BackgroundWorker ),以便在运行这个小程序时可以显示进度条。 我刚刚看到,显然你只能从STAThread( Clipboard.GetText返回null(空string) )访问剪贴板。 所以我继续创build一个单独的方法,不使用BackgroundWorkers,因此它运行在STAThread,瞧! 该代码是正确和function,但试图访问剪贴板将无法工作,如果从BackgroundWorker线程调用asynchronous。

我做了一个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 \ tb \ r \ nc \ td \ r \ n”