Toon posts:

[C#] lay out excel bestand.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een raadpleegscherm en deze gegevens wil ik voor het overzicht naar excel exporteren. Dit is allemaal geen probleem en doe dit volgens onderstaande procedure.
Ik heb en wil geen office (en dus excel) op mijn server anders was mijn probleem zo opgelost.

Wat is het probleem? Ik heb gegevens in een xml of csv bestand staan, maar dit bestand heeft geen opmaak. De gegevens staan op de juiste plek, echter een aantal kolommen moeten nog verbreed worden en een kleurtje voor de header bijvoorbeeld.

Aangezien er geen excel op de server staat kan ik er ook geen macro aan hangen.
Ik wil dus wanneer het bestand gedownload is, dat de opmaak meteen goed is en niet dat ik dan nog een macro moet toevoegen.

Ik loop nu een beetje vast en hoop dat iemand me op weg kan helpen.

code:
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
30
31
32
33
34
35
36
37
38
39
40
41
public static void ExportCSV (System.Data.DataSet ds, System.Web.UI.Page pagina)
        {
            System.IO.StringWriter sw = new System.IO.StringWriter ();
            for (int tablenr = 0 ; tablenr < ds.Tables.Count ; tablenr++)
            {
                System.Data.DataTable dt = new System.Data.DataTable();
                dt = ds.Tables[tablenr];
                string header = "";
                for (int column = 0 ; column < dt.Columns.Count ; column ++)
                {
                    header += dt.Columns[column].ColumnName + csvsep;
                }
                sw.WriteLine(header);
            
                string regel = "";
                for (int row = 0 ; row < dt.Rows.Count ; row ++)
                {
                    regel = "";
                    for (int column = 0 ; column < dt.Columns.Count ; column ++)
                    {
                        if (dt.Columns[column].DataType.ToString().IndexOf("System.Single") != -1 || dt.Columns[column].DataType.ToString().IndexOf("System.Int") != -1 ||dt.Columns[column].DataType.ToString().IndexOf("System.Decimal") != -1)
                        {
                            regel += dt.Rows[row][column].ToString().Replace(".","").Replace(",",".") + csvsep;
                        }
                        else
                        {
                            regel += dt.Rows[row][column].ToString() + csvsep;
                        }
                    }
                    sw.WriteLine(regel);
                }
            }
            sw.Close();
            string filename = new System.Random().Next().ToString() + ".xls";
            string exportfile = pagina.MapPath("downloads/"+filename);
            System.IO.FileStream fs = new System.IO.FileStream(exportfile,System.IO.FileMode.Create);
            byte[] bytearray = System.Text.Encoding.ASCII.GetBytes(sw.ToString());
            fs.Write(bytearray,0,bytearray.Length);
            fs.Close();                 
            DownloadFile (BepaalVirtualDownloadFolder(pagina)+filename,pagina);
        }

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08:08

Janoz

Moderator Devschuur®

!litemod

Dit gaat niet lukken. Het excel bestandsformaat is een gesloten formaat. Alleen bij MS weten ze exact hoe het in elkaar steekt. Je zou kunnen kijken hoe OpenOffice zijn excel document wegschrijft.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • D4Skunk
  • Registratie: Juni 2003
  • Laatst online: 20-10-2025

D4Skunk

Kind of Blue

Ik heb hier vroeger ook enkele weken naar gezocht; en ziehier de oplossing : xmlss
Geef je bestand deze structuur, en de extensie .xls & problem solved

Het is wel niet zo'n eenvoudige standaard, maar om een bestand in ms-formaat te kunnen genereren moet je er iets voor over hebben...

@janoz : niet te vlug antwoorden he ;)

Verwijderd

niet makkelijk, maar het gaat wel. googlen op excel file format levert bv als 2de link een vrij goede beschrijving van het biff formaat op.