2012-12-27 32 views
6

Cách đặt nền của một số ô trong một hàng (hoặc toàn bộ hàng) trong OpenXml?Làm cách nào để đặt nền của ô?

Sau khi đọc một số bài viết:

  1. Coloring cells in excel sheet using openXML in C#
  2. Advanced styling in Excel Open XML

tôi vẫn không thể làm cho nó làm việc.

Tác vụ của tôi thực sự ở cái nhìn đầu tiên có vẻ hơi dễ dàng hơn và hơi khác so với những gì được viết trong các bài viết đó. Các hướng dẫn đã đề cập chủ yếu cho thấy cách tạo tài liệu mới và tạo kiểu cho nó. Trong khi tôi cần thay đổi kiểu dáng của kiểu hiện có.

Tức là, tôi hiện có tài liệu xlsx (mẫu báo cáo). Tôi điền báo cáo với các giá trị cần thiết (được quản lý để làm điều đó nhờ vào SO open xml excel read cell valueMSDN Working with sheets (Open XML SDK)). Nhưng tiếp theo, tôi cần đánh dấu một vài hàng với nền màu đỏ.

Tôi không chắc liệu để sử dụng CellStyle cũng không nếu tôi nên sử dụng CellFormat hay cái gì khác ... Đây là những gì tôi đã đứng dậy đến nay:

SpreadsheetDocument doc = SpreadsheetDocument.Open("ole.xlsx", true); 

Sheet sheet = (Sheet)doc.WorkbookPart 
         .Workbook 
         .Sheets 
         .FirstOrDefault(); 

WorksheetPart worksheetPart = (WorksheetPart)doc.WorkbookPart 
               .GetPartById(sheet.Id); 
Worksheet worksheet = worksheetPart.Worksheet; 


CellStyle cs = new CellStyle(); 
cs.Name = StringValue.FromString("Normal"); 
cs.FormatId = 0; 
cs.BuiltinId = 0; 
//where are the style values? 

WorkbookStylesPart wbsp = doc.WorkbookPart 
           .GetPartsOfType<WorkbookStylesPart>() 
           .FirstOrDefault(); 
wbsp.Stylesheet.CellStyles.Append(cs); 
wbsp.Stylesheet.Save(); 



Cell cell = GetCell(worksheet, "A", 20); 
cell.StyleIndex = 1U;//get the new cellstyle index somehow 

doc.Close(); 

Thật sự tôi sẽ đánh giá rất cao một điốt phát quang dùng hơn ví dụ trọng lượng và dễ dàng về cách tạo kiểu, ví dụ: ô A20 hoặc dải từ A20 đến J20. Hoặc có thể là một liên kết đến một số hướng dẫn liên tiếp hơn.

Trả lời

5

Cuối cùng, tôi đã thay đổi ý định sử dụng nền ô và sử dụng phông chữ. Nhờ giải đáp bởi foson trong SO Creating Excel document with OpenXml sdk 2.0 Tôi cố gắng thêm một Font mới và một mới CellFormat, sau khi bảo quản dạng tế bào gốc của (ví dụ: khi thay đổi duy nhất màu chữ):

SpreadsheetDocument doc = SpreadsheetDocument.Open("1.xlsx", true); 
Sheet sheet = (Sheet)doc.WorkbookPart.Workbook.Sheets.FirstOrDefault(); 
WorksheetPart worksheetPart = (WorksheetPart)doc.WorkbookPart 
               .GetPartById(sheet.Id); 
Worksheet worksheet = worksheetPart.Worksheet; 

WorkbookStylesPart styles = doc.WorkbookPart.WorkbookStylesPart; 
Stylesheet stylesheet = styles.Stylesheet; 
CellFormats cellformats = stylesheet.CellFormats; 
Fonts fonts = stylesheet.Fonts; 

UInt32 fontIndex = fonts.Count; 
UInt32 formatIndex = cellformats.Count; 

Cell cell = GetCell(worksheet, "A", 19); 
cell.CellValue = new CellValue(DateTime.Now.ToLongTimeString()); 
cell.DataType = new EnumValue<CellValues>(CellValues.String); 

CellFormat f = (CellFormat)cellformats.ElementAt((int)cell.StyleIndex.Value); 

var font = (Font)fonts.ElementAt((int)f.FontId.Value); 
var newfont = (Font)font.Clone(); 
newfont.Color = new Color() { Rgb = new HexBinaryValue("ff0000") }; 
fonts.Append(newfont); 

CellFormat newformat = (CellFormat)f.Clone(); 
newformat.FontId = fontIndex; 
cellformats.Append(newformat); 

stylesheet.Save(); 

cell.StyleIndex = formatIndex; 
doc.Close(); 
Các vấn đề liên quan