誰でも、データ名とデータと共に、Microsoft Excelにデータグリッドビューからデータをインポートする方法を教えてください。もう一つは、日付がハッシュタグになることです。私は日付を表示するために列を拡張する必要があります。DataGridviewからExcelにエクスポート
私はボタンを押して、それを押すとMicrosoft excelがエクスポートされたデータで開くはずです。
誰でも、データ名とデータと共に、Microsoft Excelにデータグリッドビューからデータをインポートする方法を教えてください。もう一つは、日付がハッシュタグになることです。私は日付を表示するために列を拡張する必要があります。DataGridviewからExcelにエクスポート
私はボタンを押して、それを押すとMicrosoft excelがエクスポートされたデータで開くはずです。
エクセル方法
この方法は、あなたが表示されます多くのとは異なります。また、ループを使用して各セルを書き、セルにテキストデータ型を書き込むものもあります。
このメソッドは、DataTable
またはDataGridView
からオブジェクト配列を作成し、その配列をExcelに書き込みます。つまり、ループなしでExcelに書き込んでデータ型を保持することができます。
ライブラリからこれを抽出しましたが、私はこのコードでのみ動作するように変更したと思いますが、マイナーな調整が必要な場合があります。エラーが出たら私に知らせてください。私はあなたのためにそれらを修正します。通常、クラスのインスタンスを作成し、これらのメソッドを呼び出します。あなたが私の図書館を利用したいのであれば、このリンクを使ってダウンロードしてください。
https://zomp.co/Files.aspx?ID=zExcel
ボタンコードでこれを追加し、名前をコントロールに変更します。
WriteDataGrid("Sheet1", grid)
あなたはそれを保存したい場所に、ブックを保存し行を変更したいと思うWriteArray
方法で
System.Diagnostics.Process.Start("The location and filename of your file")
このラインを使用するエクスポートした後、あなたのファイルを開くには。おそらくこれをパラメータとして追加するのは理にかなっています。
wb.SaveAs("C:\MyWorkbook.xlsx")
Public Function WriteArray(Sheet As String, ByRef ObjectArray As Object(,)) As String
Try
Dim xl As Excel.Application = New Excel.Application
Dim wb As Excel.Workbook = xl.Workbooks.Add()
Dim ws As Excel.Worksheet = wb.Worksheets.Add()
ws.Name = Sheet
Dim range As Excel.Range = ws.Range("A1").Resize(ObjectArray.GetLength(0), ObjectArray.GetLength(1))
range.Value = ObjectArray
range = ws.Range("A1").Resize(1, ObjectArray.GetLength(1) - 1)
range.Interior.Color = RGB(0, 70, 132) 'Con-way Blue
range.Font.Color = RGB(Drawing.Color.White.R, Drawing.Color.White.G, Drawing.Color.White.B)
range.Font.Bold = True
range.WrapText = True
range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
range.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
range.Application.ActiveWindow.SplitColumn = 0
range.Application.ActiveWindow.SplitRow = 1
range.Application.ActiveWindow.FreezePanes = True
wb.SaveAs("C:\MyWorkbook.xlsx")
wb.CLose()
xl.Quit()
xl = Nothing
wb = Nothing
ws = Nothing
range = Nothing
ReleaseComObject(xl)
ReleaseComObject(wb)
ReleaseComObject(ws)
ReleaseComObject(range)
Return ""
Catch ex As Exception
Return "WriteArray()" & Environment.NewLine & Environment.NewLine & ex.Message
End Try
End Function
Public Function WriteDataGrid(SheetName As String, ByRef dt As DataGridView) As String
Try
Dim l(dt.Rows.Count + 1, dt.Columns.Count) As Object
For c As Integer = 0 To dt.Columns.Count - 1
l(0, c) = dt.Columns(c).HeaderText
Next
For r As Integer = 1 To dt.Rows.Count
For c As Integer = 0 To dt.Columns.Count - 1
l(r, c) = dt.Rows(r - 1).Cells(c)
Next
Next
Dim errors As String = WriteArray(SheetName, l)
If errors <> "" Then
Return errors
End If
Return ""
Catch ex As Exception
Return "WriteDataGrid()" & Environment.NewLine & Environment.NewLine & ex.Message
End Try
End Function
Public Function WriteDataTable(SheetName As String, ByRef dt As DataTable) As String
Try
Dim l(dt.Rows.Count + 1, dt.Columns.Count) As Object
For c As Integer = 0 To dt.Columns.Count - 1
l(0, c) = dt.Columns(c).ColumnName
Next
For r As Integer = 1 To dt.Rows.Count
For c As Integer = 0 To dt.Columns.Count - 1
l(r, c) = dt.Rows(r - 1).Item(c)
Next
Next
Dim errors As String = WriteArray(SheetName, l)
If errors <> "" Then
Return errors
End If
Return ""
Catch ex As Exception
Return "WriteDataTable()" & Environment.NewLine & Environment.NewLine & ex.Message
End Try
End Function
それは遅い方法ですので、あなたが行/列の多くを持っているとき、私は実際に私のデータベースプログラムでは、このメソッドを使用しないでください。代わりに、DataGridViewからCSVを作成します。 ExcelでのExcelへの書き出しは、データとセルの書式設定が必要な場合にのみ便利です。それ以外の場合はCSVを使用する必要があります。イメージの後のコードをCSV書き出しに使用することができます。
CSV方法ここで
Private Sub DataGridToCSV(ByRef dt As DataGridView, Qualifier As String)
Dim TempDirectory As String = "A temp Directory"
System.IO.Directory.CreateDirectory(TempDirectory)
Dim oWrite As System.IO.StreamWriter
Dim file As String = System.IO.Path.GetRandomFileName & ".csv"
oWrite = IO.File.CreateText(TempDirectory & "\" & file)
Dim CSV As StringBuilder = New StringBuilder()
Dim i As Integer = 1
Dim CSVHeader As StringBuilder = New StringBuilder()
For Each c As DataGridViewColumn In dt.Columns
If i = 1 Then
CSVHeader.Append(Qualifier & c.HeaderText.ToString() & Qualifier)
Else
CSVHeader.Append("," & Qualifier & c.HeaderText.ToString() & Qualifier)
End If
i += 1
Next
'CSV.AppendLine(CSVHeader.ToString())
oWrite.WriteLine(CSVHeader.ToString())
oWrite.Flush()
For r As Integer = 0 To dt.Rows.Count - 1
Dim CSVLine As StringBuilder = New StringBuilder()
Dim s As String = ""
For c As Integer = 0 To dt.Columns.Count - 1
If c = 0 Then
'CSVLine.Append(Qualifier & gridResults.Rows(r).Cells(c).Value.ToString() & Qualifier)
s = s & Qualifier & gridResults.Rows(r).Cells(c).Value.ToString() & Qualifier
Else
'CSVLine.Append("," & Qualifier & gridResults.Rows(r).Cells(c).Value.ToString() & Qualifier)
s = s & "," & Qualifier & gridResults.Rows(r).Cells(c).Value.ToString() & Qualifier
End If
Next
oWrite.WriteLine(s)
oWrite.Flush()
'CSV.AppendLine(CSVLine.ToString())
'CSVLine.Clear()
Next
'oWrite.Write(CSV.ToString())
oWrite.Close()
oWrite = Nothing
System.Diagnostics.Process.Start(TempDirectory & "\" & file)
GC.Collect()
End Sub
私は自分のボタンに何を入れますか?私は申し訳ありませんが、私はvb.net – catchyourwaves
'WriteDataTable(" Sheet1 "、dt)'の初心者です - ハードではないDataGridViewを使用するには、これを変換する必要があります。 –
このコードは、ライブラリの残りの部分がなければ機能しません。あなた自身で書くことができますが、私の図書館を自由に使うことができます。 - https://zomp.co/Files.aspx?ID=zExcel –
はそれがGemBox.Spreadsheetライブラリを使用して、あなたが試すことができ、他のソリューションであり、それはデータ型とで使用されている書式設定を維持しますDataGridView:
Dim ef As New ExcelFile()
Dim ws = ef.Worksheets.Add("DGV Sheet")
' From DataGridView to ExcelFile.
DataGridViewConverter.ImportFromDataGridView(ws, dataGridView1,
New ImportFromDataGridViewOptions() With {.ColumnHeaders = True})
' Auto fit excel columns.
Dim count As Integer = ws.CalculateMaxUsedColumns()
For index As Integer = 0 To count - 1
ws.Columns(index).AutoFit()
Next
ef.Save("DGV Book.xlsx")
またhereあなたは別のサンプルを見つけることができます。
無料版では150行だけをエクスポートできます。このライブラリがやっていることを簡単に行うことができます。実際、私はそのコードを提供しています。 –
はい、あなたは正しいです、フリーモードにはサイズ制限があります。それにもかかわらず、私のニーズには十分であり、うまくいけばそれはOPにもあります。あなたのコメントに関しては、このライブラリがやっていることを簡単に行うことができるかどうかはわかりません。まず、あなたはどのようなフォーマット(CSV、XLS、XLSX、ODSなど)を選ぶことができます。次に、DataGridViewで使用されるスタイリングとフォーマットを維持します(太字、イタリック、カラー、 、3番目はテキストデータだけでなく、ハイパーリンク、画像などもエクスポートしません。 – Phouttrat
実際は簡単です。それはすべての機能を包み込む痛みですが、Excelをより簡単に消費します。あなたが使っている製品が、Excel Automationをバイパスしていないと思っているよりもさらに悪いことは確かです。私は私のほうがいいと主張していませんが、それはフリーでオープンソースです。 OPのケースでは、CSVにエクスポートしてExcelで開く方が理にかなっています。これは、最も速く、最も簡単で安価なオプションです。 –
可能な複製http://stackoverflow.com/questions/680199/how-to-export-datagridview-to-excel-using-vb-net –
多くのデータをエクスポートする場合は、より効率的ですCSVファイルを作成してExcelで開きます。あなたが望むなら、私はそれをあなたに示すことができます。 Excelの自動化をラップするライブラリもあります。 DataTableをExcelに書き込むメソッドが含まれています。私はあなたのDataGridViewがDataTableのデータソースを持っていると仮定します。 –