Toon posts:

[C#] Word tabel vullen met database gegevens

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik ben bezig met Visual Studio tools for Office en ben het een en ander aan het uitzoeken. Als test applicatie heb ik een Word document project gemaakt die een menu bar maakt en een item heeft om een tabel te creeren met voornaam, achternaam en wanneer iemand voor het laatst heeft ingelogd op ons intranet.

Dit werkt, alleen is het creeren van de tabel vreselijk traag. Heeft iemand tips om te sneller te laten werken?

Overigens is het ophalen van de data niet het probleem. Dit gaat normaal erg snel, bijvoorbeeld als ik een DataGrid vul in ASP.NET.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
                // Open the connection.
                cnn = new SqlConnection(
                    "Data Source=<>;Database=<>;user=<>;password=<>");
                cnn.Open();

                // Open the Command and execute the DataReader.
                cmd = new SqlCommand(strSQL, cnn);
                sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

                int intRow = 2;

                // Retrieve the data and insert into new rows.
                Object beforeRow = Type.Missing;
                while (sdr.Read())
                {
                    tbl.Rows.Add(ref beforeRow);
                    tbl.Cell(intRow, 1).Range.Text = sdr[0].ToString();
                    tbl.Cell(intRow, 2).Range.Text = sdr[1].ToString();
                    tbl.Cell(intRow, 3).Range.Text = sdr[2].ToString();
                    intRow += 1;
                }

                // Bold the column heads. Note the use 
                // of the integer value, 1, to turn 
                // on bold.
                tbl.Rows[1].Range.Bold = 1;

            }

Verwijderd

Het gaat sneller als je de tabel eerst de juiste grootte geeft en daarna vult. Ook helpt het Word invisible te maken tijdens aanmaken en vullen van de tabel.

Verwijderd

als je vanuit word zou werken zou je ook zien dat dit zeer traag gaat, dit is voornamelijk te wijten aan het range object van de cel. probeer eerst dit bereik te 'collapsen' voor je de text eigenschap zet.

Verwijderd

Topicstarter
Verwijderd schreef op 28 september 2004 @ 17:19:
als je vanuit word zou werken zou je ook zien dat dit zeer traag gaat, dit is voornamelijk te wijten aan het range object van de cel. probeer eerst dit bereik te 'collapsen' voor je de text eigenschap zet.
Ik snap niet hoe ik het bereik kan collapsen.

Verwijderd

Topicstarter
Verwijderd schreef op 28 september 2004 @ 15:56:
Het gaat sneller als je de tabel eerst de juiste grootte geeft en daarna vult. Ook helpt het Word invisible te maken tijdens aanmaken en vullen van de tabel.
De recordset heeft geen eigenschap met het aantal rows. Dus hoe doe ik dat?

Verwijderd

collapse is een methode van het range object, die pas je toe voor je de tekst in de cel plaatst. maar je kunt beter anders tewerk gaan:de tabel als gewone tekst met een scheidingsteken per cel (bv. tab) in word zetten, met bookmarks begin en einde van deze ingevoegde tekst aanduiden, en helemaal op het einde de tekst naar een tabel converteren:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub TabelDocument()
  'maak voorbeelddocument aan
  Dim TabelDoc As Document
  Set TabelDoc = New Document
  'voeg tabel in als gewone tekst met tab als scheidingsteken
  TabelDoc.Range.Text = _
      "a" & vbTab & "b" & vbTab & "c" & vbCrLf & _
      "d" & vbTab & "e" & vbTab & "f" & vbCrLf & _
      "g" & vbTab & "h" & vbTab & "i" & vbCrLf
  TabelDoc.Bookmarks.Add "tabelstart", TabelDoc.Range(TabelDoc.Range.Start)
  TabelDoc.Bookmarks.Add "tabeleinde", TabelDoc.Range(TabelDoc.Range.End - 1)
  'converteer de gewone tekst naar een tabel
  TabelDoc.Range _
    ( _
      TabelDoc.Bookmarks("tabelstart").Range.Start, _
      TabelDoc.Bookmarks("tabeleinde").Range.Start _
    ).ConvertToTable _
        Separator:=wdSeparateByTabs, _
        NumColumns:=3, _
        NumRows:=3, _
        AutoFitBehavior:=wdAutoFitFixed
End Sub
Pagina: 1