Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
データグリッドビューをエクセルに出力したいです
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30271#CommentId82965
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2017/8/9 10:22:36
クリップボードを使っても構わないのであれば、
.ClipboardCopyMode プロパティを指定して
.SelectAll メソッドで全選択して
.GetClipboardContent メソッドで得たデータを
Clipboard オブジェクトに(加工してから)渡す
という手順を採ることで、データを一括転送できます。
http://dobon.net/vb/dotnet/datagridview/clipboardcopy.html
貼り付けには、Worksheet オブジェクトあるいは Range オブジェクトの
PasteSpecial メソッドを使うことができるでしょう。大抵の場合、
セル単位でひとつずつ貼り付けるよりも高速になると思います。
クリップボードを汚したくない場合には、ActiveX Data Object の PIA を
参照設定して、切断型 Recordset に DataGridView の内容を転写してから、
Range オブジェクトの CopyFromRecordset メソッドに渡すという手もあります。
> book = app.Workbooks.Open("C:\form3\Book1.xlsx")
> sheet = book.Worksheets(1)
ReleaseComObject のために、
books = app.Workbooks
book = books.Open("C:\form3\Book1.xlsx")
sheets = book.Worksheets
sheet = DirectCast(sheets(1), Excel.Worksheet)
のようにするべきです。Workbooks や Sheets も解放対象です。
> sheet.Range("A2").Value = "aaa"
こちらも同様に、
rng = sheet.Range("A2")
rng.Value = "aaa"
Marshal.ReleaseComObject(rng)
のようにします。
> System.Threading.Thread.Sleep(5000)
UI スレッドから Sleep メソッドを呼び出してはいけません。
Excel オートメーションの利用中ならば尚の事。