問題タブ [excel-interop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - ユーザーが Excel のインスタンスを使用できないようにする
Microsoft.Office.Interop.Excel を使用して、C# で Excel レポートを作成しています。これらのレポートには大量のグラフィックが含まれており、準備に時間がかかります。準備中、私のプログラムが使用する Excel アプリケーションのインスタンスはユーザーから隠されています。
私の問題は、Microsoft Office がアプリケーション インスタンスを自動的に共有する傾向があることです。ユーザーが Excel ブックを開くと、Excel は実行中の Excel のインスタンスを見つけて、そこからドキュメントを開こうとします。プログラムの実行中にユーザーが Excel ワークブックを開こうとすると、プログラムが使用するインスタンスにアタッチされます。
これにより、2 つの問題が発生します。まず、レポートが表示される前に、レポートが強制的に表示されます。そして第二に、私のプログラムは今、Excel インスタンスの注意をめぐってユーザーと戦う必要があります - そして私のプログラムは通常負けます。
では、Excel インスタンスがドキュメントを開く要求を拒否するようにする方法はありますか? (ユーザーからの、まだ私のプログラムに従うべきです)。
c# - Microsoft.Office.Interop.Excel を使用して Excel から DataSet にインポートするにはどうすればよいですか?
私がしたいこと
Microsoft.Office.Interop.Excel名前空間を使用してExcel ファイル (XSL または CSV、残念ながら XSLX ではない) を開き、それを DataSet にインポートしようとしています。ワークシートまたは列の名前を制御できないため、それらを変更できるようにする必要があります。
私が試したこと
過去にこのOLEDB メソッドを試したことがありますが、多くの問題 (バグが多く、遅く、Excel ファイルのスキーマに関する事前の知識が必要) があったため、再度実行することは避けたいと思います。私がやりたいのは、Microsoft.Office.Interop.Excel を使用してワークブックを直接 DataSet にインポートするか、ワークシートをループしてそれぞれを DataTable にロードすることです。
信じられないかもしれませんが、このためのリソースを見つけるのに苦労しました。StackOverflow でいくつかの検索を行ったところ、ほとんどの人がその逆 (DataSet => Excel)、または OLEDB 手法を試みていることがわかりました。Google はそれほど役に立ちませんでした。
これまでに得たもの
本全体を一度にインポートすることも、一度に 1 枚ずつループすることも問題ありません。Interop.Excel でこれを行うことはできますか?
vb.net - vb.net Object(,) 配列インデックスは、11x37 配列であっても (0,0) を見つけられません
初めての質問者です。ご協力いただきありがとうございます。
スプレッドシートから大量のデータを読み取り、切り刻んでからデータベースに投入しようとしています。私はむしろこのように物事を行いたくありませんが、それは会計士タイプを扱う基本的な現実です. ありがたいことに、これらのスプレッドシート レポートは非常に一貫しています。とにかく、私は LINQ for SQL を使用して object-to-reference を処理し、Microsoft.Office.Interop を使用して Excel を起動しています。
.xls でいっぱいのディレクトリを読み、それぞれについてファイルを開き、特定のセルから特定のデータをいくつか取得してから、セルの範囲を取得して値を取得します。
thisWorkArea はグローバルとして淡色表示されました:
A14 から L51 までの範囲で文字列と整数の両方を取得しているため、ここでは Object 配列にするのが理にかなっています。Excel で各行を調べて範囲を選択するのではなく、一度読んでから閉じたいのです。
したがって、次の例外が発生します。
System.IndexOutOfRangeException は処理されませんでした Message=Index が配列の範囲外でした。
この関数では:
上記の「月」は LINQ エンティティを指します。それは空想的なものではありません。
その最後の行で、例外をキャッチしています。私の時計では、thisWorkArea の長さが 456 で、(0,0) -> "Inpatient"{String} であることがわかりました。
では、なぜこの例外が発生するのでしょうか? これをあなたの専門家の手に委ねます。私はまだ vb.net にかなり慣れていないので、基本的なことが欠けているだけかもしれません。
c# - セルの値を再割り当てした後、Excelの数式が失われました
これがサンプルコードです
Cells.ValueとCells.Formulaが互いに上書きするのではないかと思います。両方を同時に割り当てたい場合、それを行うための最良の方法は何ですか?
ありがとう。
c# - winforms .NET4を使用したアクセスでのExcelのインポートが私を混乱させます
解決できない状況があり、提案が必要です。
私はExcelスプレッドシートを持っています。以下のように、見出し、小見出し、データがあります。
これをインポートする方法。お気に入り
データをインポートするときに、どの行/値が見出し/小見出し/データであるかを知る方法。?
注:データはグループになっています。
c# - (object [、])range.get_Value(XL.XlRangeValueDataType.xlRangeValueDefault)は変換エラーを引き起こします
エラー:
Cannot convert type 'string' to 'object[*,*]'
それは私が得ているエラーです。誰かが私にそれを避けることができるようにいくつかのポインタを与えることができますか?ありがとう。
ノート:
興味深いことに、(object[,])range.get_Value(XL.XlRangeValueDataType.xlRangeValueDefault)
このバグは、の場合にのみ発生しrange.Count == 1
ます。countが2以上の場合は正常に機能します。
サンプルコード:
c# - microsoft.interop.excelセルの書式設定
C#でmicrosoft.interop.excelライブラリを使用してレポートを作成しています。
私はこのようなものを持っています:
範囲にその値を整数、つまり小数点以下の桁数なしで表示したい。rangeTarge.AutoFormatを試しましたが、使用方法がわかりません。
何か案は ?
ありがとう。
c# - 16進数を使用してExcelセルの背景色を変更すると、Excelはスプレッドシートにまったく異なる色を表示します
そこで、Excelセルの内部色を次のように特定の値に設定します。
ただし、Excelでスプレッドシートを開くと、出力された色が完全に異なっていることがわかります(上記の場合、結果のスプレッドシートの色は0xDCDCEFです)。いくつかの異なる色を試してみましたが、常に色が変わり、パターンが表示されません。
これには何か理由がありますか?Color.FromArgb(241、220、219).ToArgb()と書いて色を設定してみたところ、同じことが起こりました。
c# - C#コードでのExcel参照の問題
ExcelでWORKDAY()関数を使用しているスプレッドシートがあります(これは、AnalysisToolpakライブラリ/パッケージ/Excelで呼び出すものに含まれていると思います)。このスプレッドシートを手動で開いてこの関数を呼び出すと、正常に動作します。
WORKDAY()関数が使用されているセルを参照するマクロがあります。
スプレッドシートを手動で開いた後にマクロを実行すると、このコードは正常に実行されます。問題は、スプレッドシートを開いてC#コードからマクロを実行しようとしたときです。その後、startDateの値を取得しようとすると失敗します。そのセルを見ると、#VALUEが表示されます。参照エラー。C#コードからスプレッドシートを開いたときに、正しい参照が読み込まれていないようです。
誰かがこの問題を解決する方法を知っていますか?
c# - 作成時間に基づいてExcelシートを逆の順序で並べ替える/Excelシートを逆にする
私はMicrosoft相互運用エクセルを使用して、数秒以内に作成された多くのワークシート(たとえば40)を持っているエクセルワークブックを自動化しています。今は逆の順序でワークシートを提示する必要があります。つまり、最初に作成されたシートです。開いているときに最初に来る必要があります(現在は最後になります)要するに、Excelシートを逆の順序または作成時に並べ替える必要があります
この問題の助け
thnx