2013-12-15 6 views
14

Ich bin mit Standard-BibliothekWie wird die Spaltenbreite beim Erstellen einer Excel-Datei korrekt festgelegt? (Spalteneigenschaften)

using Excel = Microsoft.Office.Interop.Excel; 

Und das ist, wie ich Excel erstellen, nur kleiner Teil des Codes:

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

Das Problem ist, dass manchmal eine Größe von Zelle kleiner sein kann die Größe dieses Textes. Ich habe dieses versucht:

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

Es funktioniert gut, aber ich muss diese Eigenschaft für jede Spalte separat festlegen. Wie kann ich das machen?

+1

besser lernen, Makros zu speichern. Auf diese Weise haben Sie den Code von allem, was Sie brauchen. Ich weiß es nicht, was ich in meiner Antwort getan habe Ich habe ein Makro gespeichert und gebe Ihnen mein Ergebnis. Es ist wirklich einfach, dass du einfach mit der Aufnahme beginnst, das tust, was du in Excel aufnehmen willst, und dann hast du den Code, was du getan hast. es ist so stark und nützlich –

+0

Vielen Dank für den Rat, ich fand ziemlich schönen Artikel darüber http://blogs.msdn.com/b/csharpfaq/archive/2010/09/28/converting-a-vba-macro-to- c-4-0.aspx – Rocketq

Antwort

27

Normalerweise mache ich das in Vb und es ist einfacher, weil Excel Makros in Vb aufzeichnet. Also, was ich normalerweise mache, gehe ich übertreffen und speichere das Makro, das ich machen möchte. So

das ist, was ich tat, jetzt und ich habe diesen 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 

Ich glaube, Sie so etwas tun kann:

xlWorkSheet.Columns[5].ColumnWidth = 18 

Für Ihre letzte Frage, was Sie brauchen Schleife zu tun ist, Trog die Spalten, deren Breite festlegen möchten:

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

hoffe, es hilft

+1

'xlWorkSheet.Columns [5].ColumnWidth = 18; 'das ist Arbeit wie sollte)) – Rocketq

+0

Funktioniert nicht für mich; Dieser Code (_xlSheet ist mein Arbeitsblatt) erkennt kein "ColumnWidth" -Member: xlSheet.Columns [ITEMDESC_COL]. –

+0

Und jetzt funktioniert es (kompiliert sowieso - habe es noch nicht getestet); Ich habe das in einer for-Schleife: _xlSheet.Columns [i] .ColumnWidth = 12.75; Warum der Unterschied zwischen diesen beiden Instanzen, weiß ich nicht ... –

3

Dieser Link wird erläutert, wie eine Zelle Stil auf einen Bereich von Zellen anwenden: http://msdn.microsoft.com/en-us/library/f1hh9fza.aspx

dieses Snippet Siehe:

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

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

Ich tat es auf diese Weise:

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

Mit dieser Art und Weise , Spalten passen immer zur Textbreite innerhalb von Zellen.

Hoffe es hilft jemandem!

+0

Genau das, was ich wollte :) – Rama

0

dieses Snippet Siehe: (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

Ich habe alle Spalten in meinem Fall als

  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; 

Hinweis Breite ändern: Spalten im Arbeitsblatt mit 1 nicht von 0, wie in arrary starten.

0

Excel Column von Datagridview:

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