Je ne sais pas pourquoi il ne fonctionne pas comme ça - il fait pour moi, mais un essai minimum citant les données:
Response.Write("\"Year\", \"Make\", \"Model\", \"Length\"\n\"1997\", \"Ford\", \"E350\", \"2.34\"\n\"2000\", \"Mercury\", \"Cougar\", \"2.38\"");
Excel peut également importer XML, google "< mso application progid? = "Excel.Sheet"? > "pour le format. Ou simplement enregistrer une feuille de calcul Excel comme XML pour voir un exemple. Les fichiers XML Excel peuvent être nommés ".xls" et pourront les ouvrir directement.
Enfin, vous pouvez utiliser NPOI .NET pour manipuler des feuilles de calcul Excel dans le format natif: http://npoi.codeplex.com/
Pour XML, vous pouvez également utiliser une classe wrapper je l'ai écrit qui encapsule cela dans un modèle simple objet C#: http://snipt.org/lLok/
Voici quelques pseudo-code pour l'utilisation de la classe:
XlsWorkbook book = new XlsWorkbook();
XlsWorksheet ws = new XlsWorksheet();
ws.Name = "Sheet Name";
XlsRow row;
XlsCell cell;
foreach (datarow in datasource) {
row = new XlsRow();
foreach (datavalue in datarow) {
cell = new XlsCell(datavalue.ToString());
cell.DataType = datavalue is numeric ? DataTypes.Numeric | DataTypes.String;
row.Cells.Add(cell);
}
ws.Rows.Add(row);
}
wkb.Worksheets.Add(ws);
Response.Write(wkb.XmlOutput());
Ou tout simplement créer votre propre méthode, voici les bases.
Créer l'en-tête de cette façon:
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("<?xml version=\"1.0\"?>\n");
sb.Append("<?mso-application progid=\"Excel.Sheet\"?>\n");
sb.Append(
"<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" ");
sb.Append("xmlns:o=\"urn:schemas-microsoft-com:office:office\" ");
sb.Append("xmlns:x=\"urn:schemas-microsoft-com:office:excel\" ");
sb.Append("xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\" ");
sb.Append("xmlns:html=\"http://www.w3.org/TR/REC-html40\">\n");
sb.Append(
"<DocumentProperties xmlns=\"urn:schemas-microsoft-com:office:office\">");
sb.Append("</DocumentProperties>");
sb.Append(
"<ExcelWorkbook xmlns=\"urn:schemas-microsoft-com:office:excel\">\n");
sb.Append("<ProtectStructure>False</ProtectStructure>\n");
sb.Append("<ProtectWindows>False</ProtectWindows>\n");
sb.Append("</ExcelWorkbook>\n");
De là, ajoutez à votre chaîne de sortie en créant des noeuds en utilisant cette structure de base:
<Worksheet ss:Name="SheetName">
<Table>
<Row>
<Cell>
<Data ss:Type="DataType">Cell A1 Contents Go Here</Data>
</Cell>
</Row>
</Table>
</Worksheet>
Dans un <Row>
, chaque élément <Cell>
crée une nouvelle colonne. Ajoutez un nouveau <Row>
pour chaque ligne de feuille de calcul. Le DataType
pour <Data>
peut être "String" ou "Number".
Doit être un paramètre dans mon Excel 2007 alors que j'ai remarqué maintenant que d'autres fichiers CSV ne s'ouvre pas non plus .. Qu'est-ce qui peut causer ce problème dans Excel, des idées? – Martin
Le problème était que j'avais besoin d'utiliser ";" au lieu de "," séparer les colonnes. Parce que "," est utilisé pour les nombres décimaux ici en Europe. Volonté ";" travailler dans tous les pays ou dois-je créer des versions différentes pour différents pays? – Martin
Le point-virgule ne fonctionne pas ici aux États-Unis. Si la citation des valeurs (et l'utilisation de virgules) ne fonctionne pas, je passerais à XML. Le format est assez simple, je vais éditer ma réponse avec les bases. –