2013-04-04 19 views
6

Sto creando un foglio Excel in modo dinamico e inserendo i valori nello stesso. Ma il valore in alcune celle viene inserito nel formato errato. seguente è il mio foglio Excel enter image description here valore nella cella selezionata avrebbe dovuto essere 0002-9343 ma viene inserita come Feb-43 .Questo causa di qualche formato sbagliato per quella colonna (colonna D) nel foglio Excel . Ho bisogno di cambiare l'intera colonna-D (tutte le celle che arrivano sotto l'intestazione D "data2") in "Formato testo" prima di inserire i dati. seguito è il codice per la creazione del foglio di Excel e l'inserimento dei datiCome modificare il formato di una colonna di foglio Excel in C#?

excel = new Application(); 
      excel.Visible = false; 
      wb = (_Workbook)(excel.Workbooks.Add(System.Reflection.Missing.Value)); 
      sheet = wb.Sheets.Add(); 
      sheet.Name = "TestSheet1"; 
      sheet.Cells[1, "A"].Value2 = "Id"; 
      sheet.Cells[1, "B"].Value2 = "Name"; 
      sheet.Cells[1, "C"].Value2 = "Data1"; 
      sheet.Cells[1, "D"].Value2 = "Data2"; 
      sheet.Cells[1, "E"].Value2 = "Data3"; 

      for (int i = 0; i < 10; i++) 
      { 
        id = i; 
        result = object; 
        data = JsonConvert.DeserializeObject(result); 

     name = (data != null) ? data.name : string.Empty; 
        data1 = (data != null) ? data.data1 : string.Empty; 
        data2 = (data != null) ? data.data2 : string.Empty; 
        data3 = (data != null) ? data.data3 : string.Empty; 

        sheet.Cells[i + 2, "A"].Value2 = name; 
        sheet.Cells[i + 2, "B"].Value2 = data1; 
        sheet.Cells[i + 2, "C"].Value2 = data2; 
        sheet.Cells[i + 2, "D"].Value2 = data3; 
      } 
      string ExcelPath = Some_path; 
      wb.SaveAsExcelPath,XlFileFormat.xlWorkbookNormal, null, null, false, false, XlSaveAsAccessMode.xlShared, false, false, null, null, null); 
      wb.Close(true); 
      excel.Quit(); 

Ora, prima del ciclo ho bisogno di cambiare il formato delle celle sotto la colonna-D in formato testo. Come fare lo stesso dal codice in C#?

risposta

2

Questa non è la risposta alla tua domanda, ma ti consiglio di utilizzare l'Open XML Api invece di usare excel tramite Interop. È possibile definire il tipo di dati per ogni cella aggiunta al foglio di lavoro.

Cell c = new Cell(); 
c.DataType = CellValues.InlineString; 
2

Hai provato a utilizzare NumberFormat?

sheet.Cells[i + 2, "D"].NumberFormat = "@";  
sheet.Cells[i + 2, "A"].Value2 = name; 
sheet.Cells[i + 2, "B"].Value2 = data1; 
sheet.Cells[i + 2, "C"].Value2 = data2; 
sheet.Cells[i + 2, "D"].Value2 = data3;  

Consiglierei di consultare librerie più facili in futuro. L'approccio di interoperabilità è pienamente valido, ma a volte è più difficile lavorare come vuoi tu.

5

Ora, prima del ciclo, è necessario modificare il formato delle celle in Colonna-D in Formato testo. Come fare lo stesso dal codice in C#?

Per cambiare il formato della intera colonna utilizzare questo

// 4 is for Col D 
sheet.Cells[1, 4].EntireColumn.NumberFormat = "@"; 

Ricordati di formattare Col D prima di tentare la scrittura ad esso. L'utilizzo di .EntireColumn garantisce che non sarà necessario modificare singolarmente il formato delle celle Excel :)

Problemi correlati