1

我有一小段 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 线程异步调用它,则尝试访问剪贴板将不起作用。

4

1 回答 1

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”

于 2013-01-25T21:13:41.757 回答