2013-12-15 12 views
14

sto usando libreria standardCome impostare correttamente Larghezza colonne durante la creazione del file Excel? (proprietà della colonna)

using Excel = Microsoft.Office.Interop.Excel; 

e questo è come creo Excel, solo piccola parte di codice:

//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"; 

Il problema è che a volte dimensione della cella può essere più piccolo quella dimensione del testo Ho provato questo:

Excel.Range chartRange; 
chartRange.EntireColumn.ColumnWidth = 31.43; 

Funziona bene, ma ho bisogno di impostare questa proprietà per ogni colonna separatamente. Come posso farlo?

+1

meglio imparare a salvare macro. in questo modo avrai il codice di TUTTO quello di cui hai bisogno. Non lo so cosa ho fatto nella mia risposta Ho salvato una macro e ti ho dato il mio risultato. è davvero facile iniziare a registrare, fare quello che vuoi registrare in Excel, e poi hai ottenuto il codice di waht che hai fatto. è così potente e utile –

+0

Grazie per la consulenza, ho trovato un bell'articolo a riguardo http://blogs.msdn.com/b/csharpfaq/archive/2010/09/28/converting-a-vba-macro-to- c-4-0.aspx – Rocketq

risposta

27

Normalmente lo faccio in VB ed è più facile perché Excel registra macro in vb. quindi quello che faccio normalmente vado ad eccellere e salvare la macro che voglio fare.

thats so quello che ho fatto oggi e ho ottenuto questo codice:

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 

Penso che si possa fare qualcosa di simile:

xlWorkSheet.Columns[5].ColumnWidth = 18 

Per la vostra ultima domanda che cosa dovete fare è ad anello Trough le colonne che si desidera impostare la loro larghezza:

for (i=1; i<=10; i++) // this will aply it form col 1 to 10 
{ 
    xlWorkSheet.Columns[i].ColumnWidth = 18 
} 

speranza che aiuta

012.
+1

'xlWorkSheet.Columns [5].ColumnWidth = 18; 'questo funziona come dovrebbe)) – Rocketq

+0

Non funziona per me; questo codice (_xlSheet è il mio foglio di lavoro) non riconosce alcun membro "ColumnWidth": xlSheet.Columns [ITEMDESC_COL]. –

+0

E ora funziona (compila, comunque, non l'ho ancora testato); Ho questo in un ciclo for: _xlSheet.Columns [i] .ColumnWidth = 12.75; Perché la differenza tra queste due istanze, non lo so ... –

3

Questo legame spiega come applicare uno stile di cella a un intervallo di celle: http://msdn.microsoft.com/en-us/library/f1hh9fza.aspx

Vedi questo frammento:

Microsoft.Office.Tools.Excel.NamedRange rangeStyles = 
this.Controls.AddNamedRange(this.Range["A1"], "rangeStyles"); 

rangeStyles.Value2 = "'Style Test"; 
rangeStyles.Style = "NewStyle"; 
rangeStyles.Columns.AutoFit(); 
21

ho fatto in questo modo:

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(); 

Con questo modo , le colonne si adattano sempre alla larghezza del testo all'interno delle celle.

Spero che aiuti qualcuno!

+0

Esattamente quello che volevo :) – Rama

0

Vedi questo frammento: (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"; 
1

devo modificare la larghezza di tutte le colonne nel mio caso come

  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; 

Nota: Le colonne nel foglio di lavoro inizia con 1 non da 0 come in arrary.

0

Excel ColumnWidth da dataGridView:

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