DataGridviewに保持されているデータのエクスポートを高速化するため、このフォーラムでは、datagridviewの内容をクリップボードにコピーする方法を提案しています。アプリケーションがExcelと通信しなければならない時間を削減するために、Excelスプレッドシートに貼り付けます。プログラムですべてを選択した後にdatagridviewの選択
これはうまくいきますが、ユーザーがdatagridviewで特定のセルを選択した場合、datagridview.SelectAll()
メソッドを使用するため、この選択が失われる可能性があります。
私はExcelにエクスポートするユーザーのオリジナルの選択ポストを再選択する簡単な解決策を見つけることを望んでいました。私は、次のことを試してみました:
Dim mySelection As DataGridViewSelectedCellCollection
mySelection = myDataGridView.SelectedCells
ExportToExcel(myDataGridView, "Exported Data")
myDataGridView.SelectedCells = mySelection
私はむしろ、選択したセルの位置よりも、選択内に保持されたデータについてであるように思わとしてDataGridViewSelectedCellCollection
が、ここで使用する正しいものではないことを疑います。
代わりに、SelectAll()
を使用せずにすべてのdatagridviewをクリップボードに取り込む方法がありますか?
Excelのコードに必要なエクスポートがここにある場合:
Private Sub ExportToExcel(myDataGridView As DataGridView, myWorksheetName As String)
' Creating a Excel object.
Dim excel As Microsoft.Office.Interop.Excel._Application = New Microsoft.Office.Interop.Excel.Application()
Dim workbook As Microsoft.Office.Interop.Excel._Workbook = excel.Workbooks.Add(Type.Missing)
Dim xlWorkSheet As Microsoft.Office.Interop.Excel._Worksheet = Nothing
Try
xlWorkSheet = workbook.ActiveSheet
xlWorkSheet.Name = myWorksheetName
'Data transfer from grid to Excel.
With xlWorkSheet
.Range("1:1").EntireRow.Font.Bold = True
'Set Clipboard Copy Mode
myDataGridView.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText
myDataGridView.SelectAll()
'Get the content from Grid for Clipboard
Dim str As String = TryCast(myDataGridView.GetClipboardContent().GetData(DataFormats.UnicodeText), String)
'Set the content to Clipboard
Clipboard.SetText(str, TextDataFormat.UnicodeText)
'Identify and select the range of cells in Excel to paste the clipboard data.
.Range("A1").Select()
'Paste the clipboard data
.Paste()
Clipboard.Clear()
End With
'Getting the location and file name of the excel to save from user.
Dim saveDialog As New SaveFileDialog()
saveDialog.Filter = "Excel files (*.xlsx)|*.xlsx"
saveDialog.FilterIndex = 2
If saveDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
workbook.SaveAs(saveDialog.FileName)
MessageBox.Show("Export Successful")
End If
Catch ex As System.Exception
MessageBox.Show(ex.Message)
Finally
excel.Quit()
workbook = Nothing
excel = Nothing
End Try
End Sub
[MSDN]によると、(https://msdn.microsoft.com/en-us/library/system.windows.forms .datagridview.selectedcells(v = vs.110).aspx)、SelectedCellsプロパティは読み込み専用であるため、使用する正しいものではありません。適切な代替案を提案するには、私は 'ExportToExcel()'のコードを見る必要があると思います。 – vbnet3d
私はこれを追加しました。元の質問で言及したような重要なポイントは、 myDataGridView.SelectAll() 'を呼び出すと、datagridviewの内容をクリップボードに追加し、ユーザの選択を上書きします。 –
私はそれを見ると、1)再びセルを再選択しようとするか(2)セルを反復するなど、セルの選択に依存しないものにエクスポートロジックを変更するか、値をStringBuilderに渡し、そのテキストをクリップボードにコピーする、または3)ライブラリを使用するか、CSVをエクスポートしてクリップボードを完全に使用しないようにします。 – vbnet3d