web-dev-qa-db-fra.com

Comment définir correctement la largeur de colonne lors de la création d'un fichier Excel? (Propriétés de la colonne)

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? 

19
Rocketq

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

33
bto.rdz

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!

25
hakan

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();
3
Rob J

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.

2
saleem kalro

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";
0
ram prasad

Excel ColumnWidth de dataGridView:

           foreach (DataGridViewColumn co in dataGridView1.Columns)
           { worksheet.Columns[co.Index + 1].ColumnWidth = co.Width/8; }
0
Reza Feizi