Excelの複数行をDataGridViewに張り付けてテキストボックスに入れる

タグの編集
投稿者 初期値Y  (社会人) 投稿日時 2023/6/19 16:06:12
使用言語はvb.net visualstudio2017を使用しています。

Excel(2016)のセルA1~A100をコピーしてDataGridViewのセル貼り付けてそれをテキストボックスに記入する方法を教えてください。

DataGridViewは2列で左に管理番号(=行数)、右に品名となっています。

初期値は管理番号1で品名は空白となっています。

品名の一番上のセル(空白)にエクセルの値をコピペし、100行表示されるようにしたいです。
また、貼り付けられたら管理番号を自動で記入する。

挿入ボタンみたいなのを用意し、それを押下すると品名を100行分テキストボックスに横並びで記入する。

以上、よろしくお願いいたします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/6/21 16:14:44
> Excel(2016)のセルA1~A100をコピーしてDataGridViewのセル貼り付けてそれをテキストボックスに記入する方法を教えてください。

プログラムから、直接 .xlsx ファイルを読み取る方法もありますが、
今回はクリップボード経由で操作したいのですね?

書式等は不要で、セル値だけ得られれば良いのでしょうから、
このように書けば OK です。
Dim data As String = Clipboard.GetText()


これにより、選択範囲の内容が文字列として得られます。
列の区切りは タブ文字
行の区切りは CrLf です。

Dim rows() As String = data.Split(ControlChars.Tab)
For Each row As String In rows
  Dim cells() As String = Split(row, vbCrLf)
  For Each cell As String In cells
    Dim text As String = cell

  Next
Next


このようにして、個々のセルのデータにアクセスできます。

なお、セル内改行がある場合は、Lf が使われます。
また、改行を含むセルは「"」で囲まれた文字列になります。

セル内に「"」があった場合も「"」で囲まれます。その場合、元の「"」は「""」と連記されるので
それらを復元する処理も必要になってきます。

  For Each cell As String In cells
    Dim text As String = cell

    '「"」で始まる文字列だった場合は 
    If text.StartsWith(""""Then
        '先頭の「"」と末尾の「"」を取り除き、 
        text = text.Substring(1, text.Length - 2)
        'さらに文字列中の「""」を「"」に置換します。 
        text = text.Replace("""""""""")
    End If


  Next


切り出した文字列は、必要に応じて二次元配列やジャグ配列などに
詰め直しておくと便利かもしれません。



> DataGridViewのセル貼り付けてそれをテキストボックスに記入する方法を教えてください。
ん? DataGridView に表示したいのですか?
TextBox に表示したいのですか?


まぁいずれにせよ、上記のようにして切り出した文字列を
DataGridView の任意のセルあるいは TextBox の Text プロパティに
セットしてやれば、目的を果たせるかと思いますよ。