2013-04-10 40 views
4

我不明白爲什麼會發生這種情況,首先我嘗試將粗體文本應用到第一行的列標題中,然後我想將標題單元格的邊框設置爲MEDIUM,但是此MEDIUM邊框樣式應用於所有細胞在表中。在下面相同的代碼中有更多的問題:CellStyle意外地應用於Worksheet中的所有單元格 - NPOI?

  1. 我的列標題(第一行)中的文本不是粗體,因爲我想。
  2. 我的列標題中的文字顏色不是我想要的紅色。

這裏是我的代碼(與NPOI庫處理):

private void CreateATest(string filename) 
    { 
     FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write); 
     HSSFWorkbook wb = new HSSFWorkbook(); 
     ISheet sheet = wb.CreateSheet("NPOI"); 
     IRow row = sheet.CreateRow(0); 
     row.RowStyle = wb.CreateCellStyle(); 
     row.RowStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER; 

     row.RowStyle.VerticalAlignment = VerticalAlignment.CENTER;    
     row.RowStyle.WrapText = true; 
     IFont font = wb.CreateFont(); 
     font.Boldweight = 3; 
     font.Color = (short) ColorTranslator.ToWin32(Color.Red); 
     font.FontHeight = 30; 
     row.RowStyle.SetFont(font); 
     int i = 0; 
     foreach (string header in new string[] { "ID", "Name", "Age" }) 
     { 
      row.CreateCell(i++).SetCellValue(header); 
      row.Cells[i - 1].CellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.MEDIUM; 
      row.Cells[i - 1].CellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.MEDIUM; 
      row.Cells[i - 1].CellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.MEDIUM; 
     } 
     row.Cells[i - 1].CellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.MEDIUM; 
     Random rand = new Random(); 
     for (i = 1; i < 1000; i++) 
     { 
      IRow row1 = sheet.CreateRow(i); 
      for (int j = 0; j < 3; j++) 
      { 
       row1.CreateCell(j).SetCellValue(rand.Next(100)); 
      } 
     } 
     wb.Write(fs); 
     fs.Close(); 
    } 

請幫我,我很新的NPOI,一直在使用它只是嘗試。您的幫助將不勝感激。 謝謝。 (< ---我不知道爲什麼這個'謝謝'不能跳到下一行,即使我在輸入之前鍵入Enter)

回答

6

格式問題是由於Excel格式化插入行的方式。他們從上面的行中獲取他們的風格信息。您可以通過將行格式化爲粗體來測試,然後在下面插入一行 - 新行也會以粗體顯示。您可以先嚐試插入其餘的行,然後再進行標題行的格式化。不幸的是,我沒有足夠的信譽來作出評論而不是回答,因爲我無法幫助您解決其他兩個問題。

+2

謝謝你,你可能有Excel中的一個很好的知識,但該規則可以適用到Excel互操作(Excel自動化),我正在使用NPOI,它通過另一種機制編輯和修改Excel文件。我已經提到了NPOI庫的一個例子,Cell樣式可以在創建後立即應用。我的代碼中的錯誤是我沒有爲我的單元格創建新樣式,在這種情況下,CellStyle將是單元格所屬行的RowStyle。我自己解決了這個問題,謝謝你,不過你應該接受我的回答。請繼續堅持與stackoverflow :) – 2013-04-11 08:22:31

+0

什麼是解決方案? – Rory 2016-02-16 23:51:57

1

這是解決方案 - 我有同樣的問題。 您需要創建一個離散的ICellStyle並將其分配給單元格的CellStyle,而不是僅在該單元格的當前CellStyle上調用「SetFont()」。

我遇到了風格應用於所有單元格的相同問題。我評論這是導致它的線,下一行是工作的一個(和ICellStyle部分):

 let workbook:HSSFWorkbook = new HSSFWorkbook() 
     let worksheet:ISheet = workbook.CreateSheet(sheetName) 

     let fontbold = workbook.CreateFont() 
     fontbold.Boldweight <- (int16 FontBoldWeight.Bold) 
     fontbold.FontHeightInPoints <- 10s 
     fontbold.FontName <- "Arial" 

     let cellstylebold:ICellStyle = workbook.CreateCellStyle() 
     cellstylebold.SetFont(fontbold) 

     let row:IRow = worksheet.CreateRow(0) 

     for h in 0..headers.Length-1 do 
      let cell = row.CreateCell(h) 
      cell.SetCellValue(headers.[h]) 
      //cell.CellStyle.SetFont(fontbold) 
      cell.CellStyle <- cellstylebold 
+0

解決方案是在我接受的答案(我自己解決它)下的評論中,實際上你在這裏回答的問題與我使用的方式相同。然而,爲了您的努力給出答案,我會給這個讚揚。謝謝。 – 2017-08-03 08:31:52

相關問題