Excel ファイル内のワークシートをループして、UsedRangeをクリップボードにコピーし、テキスト ファイルに貼り付けようとしているこの小さな C# コードがあります。
これまでのコードはエラーをスローすることなく動作しているように見えますが、何らかの理由でテキスト ファイルに何も書き込まれません。何か不足していますか?そして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:問題が何であるかを理解したと思います。System.ComponentModel.BackgroundWorker
この小さなプロセスを実行するときに進行状況バーを表示できるように、BackgroundWorker () を使用していることを忘れていました。どうやら STAThread からのみクリップボードにアクセスできるようです ( Clipboard.GetText は null (空の文字列) を返します)。そこで、BackgroundWorkers をまったく使用しない別のメソッドを作成して、STAThread で実行するようにしました。コードは正しく機能していますが、BackgroundWorker スレッドから非同期で呼び出すと、クリップボードにアクセスしようとしても機能しません。