我有一小段 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:我怀疑我的小应用程序一定有某种参考,因为如果我创建一个新的 C# 项目,Haxx 建议的代码片段就可以工作。但是,如果我使用来自 Haxx 的相同代码并将其作为新方法插入到我的小应用程序中,它就无法正常工作,即使它是完全相同的代码并调用了完全相同的“使用”库......我只会重做整个应用程序,复制/粘贴最重要的代码部分,如果解决了问题,请报告。
编辑#2:我相信我想出了问题所在。我忘了提到我正在使用 BackgroundWorker ( System.ComponentModel.BackgroundWorker
),以便在运行这个小进程时显示进度条。我刚刚读到,显然您只能从 STAThread 访问剪贴板(Clipboard.GetText 返回 null (empty string))。所以我继续创建了一个不使用 BackgroundWorkers 的单独方法,因此它在 STAThread 上运行,瞧!该代码是正确且功能正常的,但如果从 BackgroundWorker 线程异步调用它,则尝试访问剪贴板将不起作用。