J'utilise la bibliothèque standard
using Excel = Microsoft.Office.Interop.Excel;
Et voici comment je crée Excel, juste une petite partie du code:
//Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
Excel._Application xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
//add data
xlWorkSheet.Cells[1, 1] = "";
xlWorkSheet.Cells[1, 2] = "Student1";
xlWorkSheet.Cells[1, 3] = "Student2";
xlWorkSheet.Cells[1, 4] = "Student3";
Le problème est que parfois la taille de la cellule peut être plus petite que la taille du texte. J'ai essayé celui-ci:
Excel.Range chartRange;
chartRange.EntireColumn.ColumnWidth = 31.43;
Cela fonctionne bien, mais je dois définir cette propriété pour chaque colonne séparément. Comment je peux faire ça?
Je le fais normalement en vb et c’est plus facile car Excel enregistre les macros en vb. donc ce que je fais normalement, je vais dans Excel et enregistre la macro que je veux faire.
C'est donc ce que j'ai fait maintenant et j'ai obtenu ce code:
Columns("E:E").ColumnWidth = 17.29;
Range("E3").Interior.Pattern = xlSolid;
Range("E3").Interior.PatternColorIndex = xlAutomatic;
Range("E3").Interior.Color = 65535;
Range("E3").Interior.TintAndShade = 0;
Range("E3").Interior.PatternTintAndShade = 0;
Je pense que vous pouvez faire quelque chose comme ça:
xlWorkSheet.Columns[5].ColumnWidth = 18;
Pour votre dernière question, ce que vous devez faire est de boucler les colonnes que vous voulez définir avec leur largeur:
for (int i = 1; i <= 10; i++) // this will aply it form col 1 to 10
{
xlWorkSheet.Columns[i].ColumnWidth = 18;
}
j'espère que ça aide
Je l'ai fait comme ça:
var xlApp = new Excel.Application();
var xlWorkBook = xlApp.Workbooks.Add(System.Reflection.Missing.Value);
var xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.Item[1];
xlWorkSheet.Columns.AutoFit();
De cette manière, les colonnes s'adaptent toujours à la largeur du texte à l'intérieur des cellules.
J'espère que ça aide à quelqu'un!
Ce lien explique comment appliquer un style de cellule à une plage de cellules: http://msdn.Microsoft.com/en-us/library/f1hh9fza.aspx
Voir cet extrait:
Microsoft.Office.Tools.Excel.NamedRange rangeStyles =
this.Controls.AddNamedRange(this.Range["A1"], "rangeStyles");
rangeStyles.Value2 = "'Style Test";
rangeStyles.Style = "NewStyle";
rangeStyles.Columns.AutoFit();
J'ai changer toute la largeur des colonnes dans mon cas comme
worksheet.Columns[1].ColumnWidth = 7;
worksheet.Columns[2].ColumnWidth = 15;
worksheet.Columns[3].ColumnWidth = 15;
worksheet.Columns[4].ColumnWidth = 15;
worksheet.Columns[5].ColumnWidth = 18;
worksheet.Columns[6].ColumnWidth = 8;
worksheet.Columns[7].ColumnWidth = 13;
worksheet.Columns[8].ColumnWidth = 17;
worksheet.Columns[9].ColumnWidth = 17;
Remarque: les colonnes de la feuille de calcul commencent par 1 et non pas par 0 comme dans Arrary.
Voir cet extrait: (C #)
private Microsoft.Office.Interop.Excel.Application xla;
Workbook wb;
Worksheet ws;
Range rg;
..........
xla = new Microsoft.Office.Interop.Excel.Application();
wb = xla.Workbooks.Add(XlSheetType.xlWorksheet);
ws = (Worksheet)xla.ActiveSheet;
rg = (Range)ws.Cells[1, 2];
rg.ColumnWidth = 10;
rg.Value2 = "Frequency";
rg = (Range)ws.Cells[1, 3];
rg.ColumnWidth = 15;
rg.Value2 = "Impudence";
rg = (Range)ws.Cells[1, 4];
rg.ColumnWidth = 8;
rg.Value2 = "Phase";
Excel ColumnWidth de dataGridView:
foreach (DataGridViewColumn co in dataGridView1.Columns)
{ worksheet.Columns[co.Index + 1].ColumnWidth = co.Width/8; }