Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
エクセルセット
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=23850#CommentId63205
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2015/7/1 20:43:05
> ファイルの中身をFormのテキストボックスに結び付ける方法がわかりません。
残念ながら、直接結びつけるような簡単な方法はありません。
相手がテキストファイルなら、読み書きの方法が多数用意されており、たとえば
RichTextBox1.LoadFile(
"C:\sample\test.csv"
, RichTextBoxStreamType.PlainText)
などと簡単に書けますが、今回は xls なのでそういうわけにもいきません。
Excel の読み書きに対応したライブラリを用意し、それを呼び出すコードを
ご自身で記述して頂く方法があります。
必要なライブラリの名前については既に紹介していますが、それぞれの違いについても
補足説明しておきます。ご自身で追加調査の上、要件にあったものを選択してみて下さい。
> EPPlus
> ClosedXML
これらは xls には対応していません。xlsx 用です。
今回の要件を満たさないので、詳しい説明は省きます。
> NPOI
97-2003 の xls ファイルに対応しています。(xlsx も可)
実行環境に、Microsoft Excel が無くても動作します。
ライブラリは下記からダウンロードして下さい。
https://npoi.codeplex.com/
> Microsoft.Office.Interop.Excel
実行環境に、Microsoft Excel がインストールされている必要があります。
また、これを使う場合には、開発環境の Excel バージョンと、実行環境の Excel バージョンを
同一のバージョンにそろえておくことが望まれます。
この方法による操作例は、ここのサイト(VB中学校)の初級講座(第44回)
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/index_sta.htm
を始めとして、インターネット上でも多数見つかるので、サンプルに困ることは無いでしょう。
Excel を外部から操作する方法のため、自由度は非常に高いです。
ただし、もともとが .NET ライブラリではなく、ActiveX のライブラリなので、
メモリ解放処理(Marshal.ReleaseComObject)の呼び出しが適宜必要になります。
そのため、実装難易度としてはやや高めかも知れません。
解放漏れがあると、Excel.EXE が終了せず、ゾンビプロセスとして
残ったり、2 回目以降の操作時が期待動作しないなどの障害を
引き起こすことがありますので、単にサンプルをコピーして使うのではなく
コードの各行の意味を十分に理解した上で利用されることをお奨めします。
> ACEDAO
相手が xls の場合は、「ACEDAO」の前バージョンである「DAO」でも対応できます。
いずれも Excel が無くても動作します。利用するには、System.Data.OleDb にて
・Microsoft.ACE.OLEDB.12.0
・Microsoft.JET.OLEDB.4.0
のいずれかの OLE DB Provder を呼び出す方法と、CreateObject 等で
"DAO.DBEngine.120" あるいは "DAO.DBEngine.36" を呼び出す方法とがあります。
ただし、Excel シートをデータベースのテーブルのように扱うタイプの
ライブラリなので、自由度はかなり低いです。単純なデータの
追記と読み込みはできますが、削除については制限されていますし、
セル書式データを扱うこともできません。
今回の目的にはあまり向かないでしょう。こちらも説明は割愛します。
このほか、有償製品の ExcelCreator を使う方法などがあります。
いろいろと制限があるので、個人的には好きでは無いのですが、
Excel の無い環境でも xls ファイルの読み書きが出来るため、たまに利用しています。
なお、xls ファイルのバイナリーフォーマットは公開されていますので、
実装の手間を惜しまないのであれば、自前で読み取ることも
原理的には可能だったりします。実装コストを考えると現実的ではありませんが。
https://msdn.microsoft.com/ja-jp/library/office/gg615407.aspx
あるいは考え方を変えて、VB.NET で Excel データを読み取ろうとするのではなく、
Excel VBA でファイルを読み取り、それを VB.NET に渡すという方法もあるかもしれません。