Vandaag wil ik een voorbeeld dat me heeft gediend voor een lange tijd en ik ben nog steeds met behulp van laten zien.
We maken een voorbeeld voor een DataTable te exporteren naar Excel volledig onafhankelijk van het aantal kolommen of rijen die je hebt.
Er kunnen vele manieren om dit te doen, maar ik vind het echt handig, omdat deze methode werkt voor elke versie van Excel. Om redenen van Compatil met nieuwe versies van Excel alleen omgaan met 256 kolommen.
Het eerste wat we nodig hebben is het toevoegen van een verwijzing naar de Microsoft.Office.Interop.Excel en doe als volgt:

Import verwijzing naar Excel

Import Excel referentie
Dan moeten we een formulier, een knop, een DataGridView en een voortgangsbalk. We kunnen hebben zoals te zien in de foto:

Formulier toepassing dataset exporteren naar Excel
Nu wil ik laten zien alle code is heel eenvoudig het belangrijkste is dat het zich aanpast aan elke tafel. Ik zal kunnen worden hergebruikt zonder problemen.
Invoer System.Data Invoer System.Data.SqlClient Invoer Microsoft.Office.Interop Public Class Form1 Prive-ds als nieuwe DataSet Private Sub Form1_Load (ByVal sender As System.Object, ByVal e Als System.EventArgs) Handles MyBase.Load '///////////////////////////////////////////////// / '/ / Maak de verbinding en vul de DataGridView '///////////////////////////////////////////////// / Dim cnn As New SqlConnection ("Data Source = localhost \ SQLExpress; Initial Catalog = Noordenwind; Integrated Security = True") Dim da As New SqlDataAdapter ("Select * from klanten", CNN) da.Fill (ds) DataGridView1.DataSource = ds.Tables (0) End Sub BtnExportar_Click Private Sub (ByVal sender As System.Object, ByVal e Als System.EventArgs) Handles btnExportar.Click '///////////////////////////// '/ / Maak het Excel-object '///////////////////////////// Dim m_Excel Dim objLibroExcel Dim objHojaExcel m_Excel = CreateObject ("Excel.Application") m_Excel.Workbooks.Add objLibroExcel = () objHojaExcel = objLibroExcel.Worksheets (1) objHojaExcel.Name = "Klanten" objHojaExcel.Visible = Excel.XlSheetVisibility.xlSheetVisible objHojaExcel.Activate () '///////////////////////////////////////////////// //////// '/ / Definieer twee variabelen om rij-en kolom-controle '///////////////////////////////////////////////// //////// Dim rij As Integer = 1 Dim column As Integer = 1 '///////////////////////////////////////////////// '/ / We zetten de lijn met de kolomtitels '///////////////////////////////////////////////// objHojaExcel.Range ("A1"). Select () Voor elke v in ds.Tables (0). Columns objHojaExcel.Range (kolomnaam (kolom) & 1). Value = dc.ColumnName kolom + = 1 Volgende rij + = 1 '///////////////////////////////////////////// '/ / We formaat de titel rij '///////////////////////////////////////////// Als Excel.Range Dim = objHojaExcel.Range objRango ("A1:" & kolomnaam (ds.Tables (0) Columns.Count) & "1".) objRango.Font.Bold = True objRango.Cells.Interior.ColorIndex = 35 objRango.Cells.Borders (Excel.XlBordersIndex.xlDiagonalDown). LineStyle = Excel.XlLineStyle.xlLineStyleNone objRango.Cells.Borders (Excel.XlBordersIndex.xlDiagonalUp). LineStyle = Excel.XlLineStyle.xlLineStyleNone objRango.Cells.Borders (Excel.XlBordersIndex.xlEdgeLeft). LineStyle = Excel.XlLineStyle.xlLineStyleNone objRango.Cells.Borders (Excel.XlBordersIndex.xlEdgeRight). LineStyle = Excel.XlLineStyle.xlContinuous objRango.Cells.Borders (Excel.XlBordersIndex.xlEdgeTop). LineStyle = Excel.XlLineStyle.xlContinuous objRango.Cells.Borders (Excel.XlBordersIndex.xlEdgeBottom). LineStyle = Excel.XlLineStyle.xlContinuous '////////////////////////////////////////// '/ / Laad alle rijen in de gegevenstabel '////////////////////////////////////////// ProgressBar1.Maximum = ds.Tables (0). Rows.Count kolom = 1 ProgressBar1.Value = 0 Voor Elke dr In ds.Tables (0). Rijen kolom = 1 Voor elke v in ds.Tables (0). Columns objHojaExcel.Range (kolomnaam (kolom) & rij). Value = dr (dc.ColumnName) kolom + = 1 Volgende rij + = 1 ProgressBar1.Value + = 1 Volgende '////////////////////////////////////// '/ / Past automatisch de breedte '/ / Voor alle gebruikte kolommen '////////////////////////////////////// objHojaExcel.Range objRango = ("A1:" & kolomnaam (ds.Tables (0) Columns.Count) & ds.Tables (0) Rows.Count.ToString..) objRango.Select () objRango.Columns.AutoFit () '///////////////////////////////////// '/ / Wij zeggen Excel om te laten zien '///////////////////////////////////// MsgBox ("Export naar Excel Complete" MsgBoxStyle.Information, ":.: Solovb.net ::.") m_Excel.Visible = True End Sub Public Function kolomnaam (ByVal aantal As Integer) As String Dim kolom (256) As String Kolom (1) = "A" Kolom (2) = "B" kolom (3) = "C" Kolom (4) = "D" Kolom (5) = "E" kolom (6) = "F" Kolom (7) = "G" Kolom (8) = "H" kolom (9) = "I" Kolom (10) = "J" Kolom (11) = "K" Kolom (12) = "L" Kolom (13) = "M" kolom (14) = "N" Kolom (15) = "O" kolom (16) = "P" kolom (17) = "Q" Kolom (18) = "R" kolom (19) = "S" Kolom (20) = "T" kolom (21) = "U" kolom (22) = "V" kolom (23) = "W" kolom (24) = "X" kolom (25) = "Y" kolom (26) = "Z" kolom (27) = "AA" kolom (28) = "AB" kolom (29) = "AC" kolom (30) = "AD" kolom (31) = "AE" kolom (32) = "AF" kolom (33) = "AG" kolom (34) = "AH" kolom (35) = "AI" kolom (36) = "AJ" kolom (37) = "AK" kolom (38) = "AL" kolom (39) = "AM" kolom (40) = "AN" kolom (41) = "AO" kolom (42) = "AP" kolom (43) = "AQ" kolom (44) = "AR" kolom (45) = "AS" kolom (46) = "AT" kolom (47) = "AU" kolom (48) = "AV" kolom (49) = "AW" kolom (50) = "AX" kolom (51) = "AY" kolom (52) = "AZ" kolom (53) = "BA" kolom (54) = "BB" kolom (55) = "BC" kolom (56) = "BD" kolom (57) = "BE" kolom (58) = "BF" kolom (59) = "BG" kolom (60) = "BH" kolom (61) = "BI" kolom (62) = "BJ" kolom (63) = "BK" kolom (64) = "BL" kolom (65) = "BM" kolom (66) = "BN" kolom (67) = "BO" kolom (68) = "BP" kolom (69) = "BQ" kolom (70) = "BR" kolom (71) = "BS" kolom (72) = "BT" kolom (73) = "BU" kolom (74) = "BV" kolom (75) = "BW" kolom (76) = "BX" kolom (77) = "BY" kolom (78) = "BZ" kolom (79) = "CA" kolom (80) = "CB" kolom (81) = "CC" kolom (82) = "CD" kolom (83) = "CE" kolom (84) = "CF" kolom (85) = "CG" kolom (86) = "CH" kolom (87) = "CI" kolom (88) = "CJ" kolom (89) = "CK" kolom (90) = "CL" kolom (91) = "CM" kolom (92) = "GN" kolom (93) = "CO" kolom (94) = "CP" kolom (95) = "CQ" kolom (96) = "CR" kolom (97) = "CS" kolom (98) = "CT" kolom (99) = "CU" column (100) = "CV" column (101) = "CW" column (102) = "CX" column (103) = "CY" column (104) = "CZ" column (105) = "DA" column (106) = "DB" column (107) = "DC" column (108) = "DD" column (109) = "DE" column (110) = "DF" column (111) = "DG" column (112) = "DH" column (113) = "ID" column (114) = "DJ" column (115) = "DK" column (116) = "DL" column (117) = "DM" column (118) = "DN" column (119) = "DO" column (120) = "DP" column (121) = "DQ" column (122) = "DR" column (123) = "DS" column (124) = "DT" column (125) = "DU" column (126) = "DV" column (127) = "DW" column (128) = "DX" column (129) = "DY" column (130) = "DZ" column (131) = "EA" column (132) = "EB" column (133) = "EC" column (134) = "ED" column (135) = "EE" column (136) = "EF" column (137) = "EG" column (138) = "EH" column (139) = "EI" kolom (140) = "EJ" column (141) = "EK" column (142) = "EL" column (143) = "EM" column (144) = "NL" column (145) = "EO" column (146) = "EP" column (147) = "EQ" column (148) = "ER" column (149) = "ES" column (150) = "ET" column (151) = "EU" column (152) = "EV" column (153) = "EW" column (154) = "EX" column (155) = "EY" column (156) = "EZ" column (157) = "FA" column (158) = "FB" column (159) = "FC" column (160) = "FD" column (161) = "FE" column (162) = "FF" column (163) = "FG" column (164) = "FH" column (165) = "FI" column (166) = "FJ" column (167) = "FK" column (168) = "FL" column (169) = "FM" kolom (170) = "FN" column (171) = "VOOR" column (172) = "FP" column (173) = "CF" column (174) = "FR" column (175) = "FS" column (176) = "FT" column (177) = "FU" column (178) = "FV" column (179) = "FW" column (180) = "FX" column (181) = "FY" column (182) = "FZ" column (183) = "GA" column (184) = "GB" column (185) = "GC" column (186) = "GD" column (187) = "GE" column (188) = "GF" column (189) = "GG" column (190) = "GH" column (191) = "GI" column (192) = "GJ" column (193) = "GK" column (194) = "GL" column (195) = "GM" column (196) = "GN" column (197) = "GO" column (198) = "GP" column (199) = "GQ" kolom (200) = "GR" column (201) = "GS" column (202) = "GT" kolom (203) = "GU" kolom (204) = "GV" kolom (205) = "GW" kolom (206) = "GX" kolom (207) = "GY" kolom (208) = "GZ" kolom (209) = "HA" column (210) = "HB" kolom (211) = "HC" column (212) = "HD" kolom (213) = "HE" kolom (214) = "HF" column (215) = "HG" column (216) = "HH" kolom (217) = "HI" kolom (218) = "HJ" kolom (219) = "HK" kolom (220) = "HL" column (221) = "HM" column (222) = "HN" column (223) = "HO" column (224) = "HP" column (225) = "HQ" column (226) = "HR" column (227) = "GS" column (228) = "HT" column (229) = "HU" column (230) = "HV" column (231) = "HW" column (232) = "H" column (233) = "HY" kolom (234) = "HZ" column (235) = "IA" column (236) = "IB" kolom (237) = "IC" kolom (238) = "ID" kolom (239) = "IE" kolom (240) = "IF" column (241) = "IG" column (242) = "IH" column (243) = "II" kolom (244) = "IJ" kolom (245) = "IK" kolom (246) = "IL" kolom (247) = "IM" kolom (248) = "IN" kolom (249) = "IO" column (250) = "IP" column (251) = "IQ" column (252) = "IR" column (253) = "IS" kolom (254) = "IT" column (255) = "IU" kolom (256) = "IV" Return kolom (aantal) End Function End Class
Deze methode heeft gediend me goed en ik hoop dat jullie ook ... laat dan uw commentaar.
Bitacoras.com informatie ...
Tarief in Bitacoras.com: Hallo: Vandaag wil ik een voorbeeld dat me heeft gediend voor een lange tijd en ik ben nog steeds met behulp van laten zien. We maken een voorbeeld voor een DataTable exporteren naar Excel volledig onafhankelijk van het aantal kolommen of rijen die zijn ... ..
Goed ...
Excellent post! Dank je hielp me vol, maar ik heb een grote vraag .. Omdat deze verbinding is met sql .. Hoe verander ik de naam van de kolommen? Omdat het brengt de naam van de velden in sql ..!
Laten we hopen dat heb ik begrepen ..
Dank je wel!
Ik ga om op te slaan ...
op een bepaald punt is het nuttig zal zijn ...
Is het goed voor Excel 2007? Ik heb problemen gehad met de export te ontwikkelen, dat het geldig is voor eerdere versies, maar niet voor 2007. Bedankt
Enorme bron code. diende me goed. q het was de hoogste tijd.
Maar hebben ook de import van een data tabel ecxel. ambien, maar kon een DataGrid en dan het updaten van de DataAdapter en accepteren van de veranderingen die we zouden kunnen besparen DataTable in q bd ... Ik hoop dat ik kan helpen of kunnen vinden .. bedankt
Hallo Hartelijk dank! dit geweldig!
Maar ik vraag me af waarin wordt bepaald dat gebruikt in het geval datagrid die meerdere Datagrid?
Uit de tabel u belt ...
SELECT * FROM (tabelnaam)
Als u wilt opgeven welke velden je wilt
selecteren (velden, akkers, velden) * uit tabel
EJM
Selecteer auto kleur, anionen van voertuigen
Ik heb een probleem met dit voorbeeld maak ik 2 v fouten in variabelen en dr, kan ik doen om het te repareren?
Hoi, probeer dit:
Voor elke dr Als DataRow In ds.Tables (0). Rijen voor elke dc en als een DataColumn In ds.Tables (0). Columns
Ik hoop dat dit is opgelost. Groeten.
hello.
Dit chevere, maar een deel van de kolom naam is niet erg functioneel.
Ik zal uploaden naar mijn blog een veel kleinere omvang code beperkingen en zonder
jaysson.blogspot.com
klaar en ging op het artikel
http://jaysson.blogspot.com/2010/06/columnas-es-excel.html
Goed artikel, maar ik heb een probleem op mijn computer met Excel 2007 werkt prima, maar computers met Excel 2003 of eerder zal niet werken. Iedereen weet dat als het probleem van de bibliotheken die worden ingevoerd, zoals u geven aan die werkt voor elke Excel begrijpen, maar ik heb ondervonden dit probleem.
Laten we eens zien of iemand kan de twijfel op te lossen.
Dank u.
Goed ...
Excellent post! Dank je hielp me vol, maar ik heb een grote vraag .. Omdat deze verbinding is met sql .. Hoe verander ik de naam van de kolommen? Omdat het brengt de naam van de velden in sql ..!
Laten we hopen dat heb ik begrepen ..
Dank je wel!
Public Sub ExportarDatosExcel (ByVal DataGridView1 Als DataGridView, ByVal titel As String)
Als nieuwe Excel.Application Dim m_Excel
m_Excel.Cursor = Excel.XlMousePointer.xlWait
m_Excel.Visible = True
Als Excel.Workbook Dim = m_Excel.Workbooks.Add objLibroExcel
Als Excel.Worksheet Dim = objLibroExcel.Worksheets objHojaExcel (1)
Met objHojaExcel
. Visible = Excel.XlSheetVisibility.xlSheetVisible
. Activate ()
'Header
. Range ("A1: L1"). Merge ()
. Range ("A1: L1"). Value = "INSTITUUT ARGENCAF"
. Range ("A1: L1"). Font.Bold = True
. Range ("A1: L1"). Font.Size = 15
"Tuft
. Range ("A2: L2"). Merge ()
. Range ("A2: L2"). Value = titel
. Range ("A2: L2"). Font.Bold = True
. Range ("A2: L2"). Font.Size = 12
Const primeraLetra Als Char = "A"
Const firstNumber Als Short = 3
Dim brief als Char, Char Als UltimaLetra
Dim Nummer As Integer, UltimoNumero As Integer
Dim As Byte = Asc cod_letra (primeraLetra) - 1
Dim As String = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator sepDec
Dim As String = Application.CurrentCulture.NumberFormat.NumberGroupSeparator sepMil
'Stel de kolommen van de dochter van berekening
StrColumna Dim As String = ""
LetraIzq Dim As String = ""
Dim As Byte = Asc cod_LetraIzq (primeraLetra) - 1
Letter = primeraLetra
Nummer = firstNumber
Als Excel.Range Dim objCelda
Voor elke c Als DataGridViewColumn In DataGridView1.Columns
Dan, als c.Visible
Als Letter = "Z" Dan
Letter = primeraLetra
cod_letra = Asc (primeraLetra)
cod_LetraIzq + = 1
LetraIzq = Chr (cod_LetraIzq)
Anders
cod_letra + = 1
Letter = Chr (cod_letra)
End If
strColumna = LetraIzq + Lyrics + Numero.ToString
objCelda =. Range (strColumna, Type.Missing)
objCelda.Value = c.HeaderText
objCelda.EntireColumn.Font.Size = 8
'ObjCelda.EntireColumn.NumberFormat = c.DefaultCellStyle.Format
Als c.ValueType Is gettype (Decimaal) OrElse c.ValueType Is gettype (Double) Dan
objCelda.EntireColumn.NumberFormat = "#" + sepMil + "0" + sepDec + "00"
End If
End If
Volgende
Als Excel.Range Dim objRangoEncab =. Range (primeraLetra + Numero.ToString, LetraIzq + Lyrics + Numero.ToString)
objRangoEncab.BorderAround (1, Excel.XlBorderWeight.xlMedium)
UltimaLetra = Verzend
Dim As String = LetraIzq UltimaLetraIzq
'LOAD DATA
Dim i As Integer = Aantal + 1
Voor Elke In de List als DataGridViewRow DataGridView1.Rows
LetraIzq = ""
cod_LetraIzq = Asc (primeraLetra) - 1
Letter = primeraLetra
cod_letra = Asc (primeraLetra) - 1
Voor elke c Als DataGridViewColumn In DataGridView1.Columns
Dan, als c.Visible
Als Letter = "Z" Dan
Letter = primeraLetra
cod_letra = Asc (primeraLetra)
cod_LetraIzq + = 1
LetraIzq = Chr (cod_LetraIzq)
Anders
cod_letra + = 1
Letter = Chr (cod_letra)
End If
strColumna = LetraIzq + Lyrics
"Burden hier moet worden
. Cells (i, strColumna) = IIf (IsDBNull (reg.ToString), "", reg.Cells (c.Index). Value)
'. Cells (i, strColumna) = IIf (IsDBNull (reg. (c.DataPropertyName)), c.DefaultCellStyle.NullValue, reg (c.DataPropertyName))
'. Range (strColumna + i, strColumna + i). In ()
End If
Volgende
Als Excel.Range Dim objRangoReg =. Range (primeraLetra + i.ToString, i.ToString strColumna +)
objRangoReg.Rows.BorderAround ()
objRangoReg.Select ()
i + = 1
Volgende
UltimoNumero = i
"Teken de lijnen van de kolommen
LetraIzq = ""
cod_LetraIzq = Asc ("A")
cod_letra = Asc (primeraLetra)
Letter = primeraLetra
Voor elke c Als DataGridViewColumn In DataGridView1.Columns
Dan, als c.Visible
objCelda =. Range (+ Lyrics + primerNumero.ToString LetraIzq, LetraIzq + Lyrics + (UltimoNumero - 1.) ToString)
objCelda.BorderAround ()
Als Letter = "Z" Dan
Letter = primeraLetra
cod_letra = Asc (primeraLetra)
LetraIzq = Chr (cod_LetraIzq)
cod_LetraIzq + = 1
Anders
cod_letra + = 1
Letter = Chr (cod_letra)
End If
End If
Volgende
"Teken de dikke buitenste rand
Als Excel.Range Dim objRango =. Range (primeraLetra + primerNumero.ToString, UltimaLetra UltimaLetraIzq + + (UltimoNumero - 1.) ToString)
objRango.Select ()
objRango.Columns.AutoFit ()
objRango.Columns.BorderAround (1, Excel.XlBorderWeight.xlMedium)
End With
m_Excel.Cursor = Excel.XlMousePointer.xlDefault
End Sub
ToolStripButton2_Click_1 Private Sub (ByVal sender As System.Object, ByVal e Als System.EventArgs) Handles ToolStripButton2.Click
ExportarDatosExcel (DataGridView1, "export")
End Sub
EXCELLENT! .... bedankt broer, ik had 3 dagen met een module voor import / export Excel en niets werkte .... maar dan met uw oplossing zie ik weer de sterren ... Groeten uit Arequipa !!!:..
Graag gedaan. Ik ben blij dat je als voorbeeld gediend.
Deze code heeft me veel geholpen, dus ik werk met mijn twee centen:
Ik optimaliseerde de "kolomnaam" de kolom ahsta ZZ te krijgen (702 cols.)
Hier geef ik je de code:
Public Function kolomnaam (ByVal aantal As Integer) As String
Dim kolom (703) As String
Kolom (1) = "A"
Kolom (2) = "B"
kolom (3) = "C"
Kolom (4) = "D"
Kolom (5) = "E"
kolom (6) = "F"
Kolom (7) = "G"
Kolom (8) = "H"
kolom (9) = "I"
Kolom (10) = "J"
Kolom (11) = "K"
Kolom (12) = "L"
Kolom (13) = "M"
kolom (14) = "N"
Kolom (15) = "O"
kolom (16) = "P"
kolom (17) = "Q"
Kolom (18) = "R"
kolom (19) = "S"
Kolom (20) = "T"
kolom (21) = "U"
kolom (22) = "V"
kolom (23) = "W"
kolom (24) = "X"
kolom (25) = "Y"
kolom (26) = "Z"
Dim i = 27
Voor Ltr1 = 1 tot 26
Voor Ltr2 = 1 tot 26
kolom (i) = kolom (Ltr1) en kolom (Ltr2)
i + = 1
Volgende
Volgende
Return kolom (aantal)
End Function
TECKNOCK, hartelijk dank voor uw hulp!, Maar houd in gedachten dat als het boek dat ik geloof dat compatibel is met Excel 97-2003 kolommen toegestane maximum is 256 (tot en met IV). Net als een reactie, zodat hier rekening mee houden.
Elisa
Bij het uitvoeren van de applicatie lokaal funcioana correct, maar als ik naar een website is niet het genereren van de excelleren, maar krijgen geen fout
kijk, ik doe een GEAARD naar mijn sql
Ik zal niet graag doen, maar aja estubo
Ik heb hulp nodig probeer alle formulieren die hier zijn te doen en ik krijg een foutmelding alle
De hand, je bent de perfecte functie maximum.
[...] [...]
zeer goed, felicitaties zijn in de beste post die ik heb gelezen en geraadpleegd
Dank je wel! Het was erg behulpzaam
Ik hoor de code werkt ik een fouten te maken in da.Fill (ds)
Ik teken de fout was niet SQLException gevonden
kunt u mij helpen