2011-10-24 16 views

Odpowiedz

21
WorkbookStylesPart sp = workbookPart.AddNewPart<WorkbookStylesPart>(); 

Tworzenie stylów,

sp.Stylesheet = new Stylesheet(); 

Tworzenie numberingformat,

sp.Stylesheet.NumberingFormats = new NumberingFormats(); 
// #.##% is also Excel style index 1 


NumberingFormat nf2decimal = new NumberingFormat(); 
nf2decimal.NumberFormatId = UInt32Value.FromUInt32(3453); 
nf2decimal.FormatCode = StringValue.FromString("0.0%"); 
sp.Stylesheet.NumberingFormat.Append(nf2decimal); 

utworzyć format komórek i zastosować identyfikator formatu numeracji

cellFormat = new CellFormat(); 
cellFormat.FontId = 0; 
cellFormat.FillId = 0; 
cellFormat.BorderId = 0; 
cellFormat.FormatId = 0; 
cellFormat.NumberFormatId = nf2decimal.NumberFormatId; 
cellFormat.ApplyNumberFormat = BooleanValue.FromBoolean(true); 
cellFormat.ApplyFont = true; 

//append cell format for cells of header row 
sp.Stylesheet.CellFormats.AppendChild<CellFormat>(cellFormat); 


//update font count 
sp.Stylesheet.CellFormats.Count = UInt32Value.FromUInt32((uint)sp.Stylesheet.CellFormats.ChildElements.Count); 


//save the changes to the style sheet part 
sp.Stylesheet.Save(); 

i podczas dołączania wartość do komórki mają następujący kod centrum hereonversion i zastosować indeks stylu w moim przypadku miałem trzy indeks stylu stąd 3 był mój procentowy wskaźnik stylu, tj. 2, ponieważ indeksy zaczynają się od 0

string val = Convert.ToString(Convert.ToDecimal(value)/100); 
Cell cell = new Cell(); 
cell.DataType = new EnumValue<CellValues>(CellValues.Number); 
cell.CellValue = new CellValue(val); 
cell.StyleIndex = 2; 
row.Append(cell); 
+0

Ten przepływ działał, ponieważ możemy mieć dowolne formatowanie komórek za pomocą tego procesu. Dzięki ssyladin – Selwyn

+0

Bez obaw. Właściwie poświęć około 30 minut, próbując sformatować "ręcznie" tylko za pomocą OpenXML i ostatecznie zrezygnował. Zachowałem pewność, że otrzymam skorumpowany arkusz roboczy. Jest to dla mnie dobra odpowiedź, ponieważ pomaga uniknąć zależności między bibliotekami zewnętrznymi. – jklemmack

+1

Czy Twój komentarz na temat indeksu stylu Excela oznacza, że ​​jeśli chcesz użyć domyślnego stylu procentowego w Excelu, nie musisz dodawać nowego formatu, po prostu ustaw komórkę tak, aby styl indeksu 1? – cidthecoatrack

14

Niestety nie ma prostej odpowiedzi. Jeśli pobrałeś narzędzie produktywności OpenXML dla pakietu Microsoft Office, możesz przeanalizować prosty arkusz kalkulacyjny i zobaczyć, jak formatuje ten numer. Aby zrobić to, czego chcesz, czego potrzeba do:

  • Tworzenie arkusza stylów
  • dodać nową NumberFormat z definicji niestandardowego
  • Tworzenie CellStyleFormat, wraz z marginesami, Fill, czcionki zostały zdefiniowane, oprócz do NumberFormat powyżej
  • Utwórz CellFormats, który odnosi się do powyższego
  • Na koniec ustaw identyfikator StyleIndex komórki na identyfikator CellFormat, który używa NumberFormat.

WHEW!

Ogólnie lepszym rozwiązaniem jest przejrzenie ClosedXML pod adresem http://closedxml.codeplex.com/ (straszliwa nazwa). Jest to biblioteka open source (NIE GPL! - sprawdź licencję), która umieszcza użyteczne rozszerzenia na OpenXML. Aby sformatować komórkę arkusza, można zamiast tego zrobić:

worksheet.Cell(row, col).Value = "0.036"; 
worksheet.Cell(row, col).Style.NumberFormat.Format = "0.0%"; 

(od http://closedxml.codeplex.com/wikipage?title=Styles%20-%20NumberFormat&referringTitle=Documentation)


UPDATE ClosedXML została przeniesiona do GitHub na https://github.com/ClosedXML/ClosedXML

+0

może to działać, wymaga jednak dodania strony trzeciej, a nie "zwykłego" OpenXml. – fcm

4

Excel zawiera predefiniowane formaty do formatowania ciągów na różne sposoby. Atrybut s na elemencie komórki będzie odnosił się do stylu, który będzie odnosił się do formatu liczbowego, który będzie odpowiadał pożądanemu formatowi procentowemu. Więcej informacji można znaleźć pod numerem question/answer.

Oto obiekt CellFormat, który należy utworzyć, aby maska ​​0.00% została zastosowana do numeru. W tym przypadku chcesz predefiniowany numer formatu 10 lub 0,00%:

CellFormat cellFormat1 = new CellFormat(){ NumberFormatId = (UInt32Value)10U, FontId = (UInt32Value)0U, FillId = (UInt32Value)0U, BorderId = (UInt32Value)0U, FormatId = (UInt32Value)0U, ApplyNumberFormat = true }; 

Oto szybki sposób wstawić CellFormat w skoroszycie:

CellFormats cellFormats = workbookPart.WorkbookStylesPart.Stylesheet.Elements<CellFormats>().First(); 
cellFormats.Append(cellFormat); 
uint styleIndex = (uint)cellFormats.Count++; 

będziesz musiał dostać komórkę ma 3.6 w niej i ustaw jego s atrybut (StyleIndex) do nowo włożonego formatu komórek:

Cell cell = workSheetPart.Worksheet.Descendants<Cell>().SingleOrDefault(c => cellAddress.Equals("A1")); 
cell.StyleIndex = styleIndex; 
2

Możesz to zrobić w prosty sposób. Jeśli chcesz, aby zastosować go na pojedynczej komórki następnie to zrobić,

worksheet.Cell(9, 10).Style.NumberFormat.Format = "#,##0.00\\%"; 

A jeśli chcesz zastosować je na wielu komórkach następnie to zrobić,

worksheet.Range(9, 10, 15, 10).Style.NumberFormat.Format = "#,##0.00\\%"; 

Można również znaleźć więcej formatów Here , a także możesz znaleźć to samo z Excela.

+1

To nie jest OpenXML, jak wskazano w pytaniu. – fcm

Powiązane problemy