2017-05-18 3 views
2

Ich versuche, Excel-Tabelle mit Datenformatierung zu schreiben. Ich habe die hier erwähnte Logik verwendet https://www.codeproject.com/Articles/877791/How-to-Create-Large-Excel-File-using-OpenxmlProblem mit DateFormat in Excel während der Verwendung von OpenXMLWriter

Das Problem, mit dem ich konfrontiert bin, ist, ich brauche das Datum im britischen Format DD-MM-YYYY. SO habe ich

geändert
NumberingFormat nf; 
nf = new NumberingFormat(); 
nf.NumberFormatId = iExcelIndex++; 
// nf.FormatCode = @"[$-409]m/d/yy\ h:mm\ AM/PM;@";Changed this to below 
nf.FormatCode = @"[$-409]dd/mm/yyyy;@"; 

Aber jetzt ist der Zeitpunkt kommt als XX-01-1900 Monat und Jahr werden auf 01 und 1900 säumige

Wäre toll, wenn mir jemand in einer richtigen Richtung weisen .

Antwort

1

Die folgenden Werke für mich: Ich füge ein Datum auf CellRef A1

static void Main(string[] args) 
{ 
    string excelFilePath = "Test1.xlsx"; 
    string text = "02-25-1999"; 
    string sheetName = "Sheet1"; 

    using (SpreadsheetDocument spreadsheetDoc = SpreadsheetDocument.Open(excelFilePath, true)) 
    {    
     var stylesheet = spreadsheetDoc.WorkbookPart.WorkbookStylesPart.Stylesheet; 
     var numberingFormats = stylesheet.NumberingFormats; 

     const string dateFormatCode = "dd/mm/yyyy"; 

     var dateFormat = 
      numberingFormats.OfType<NumberingFormat>() 
       .FirstOrDefault(format => format.FormatCode == dateFormatCode); 

     if (dateFormat == null) 
     { 
      dateFormat = new NumberingFormat 
      { 
       NumberFormatId = UInt32Value.FromUInt32(164), 
       // Built-in number formats are numbered 0 - 163. Custom formats must start at 164. 
       FormatCode = StringValue.FromString(dateFormatCode) 
      }; 
      numberingFormats.AppendChild(dateFormat); 
      numberingFormats.Count = Convert.ToUInt32(numberingFormats.Count()); 
      stylesheet.Save(); 
     } 
     // get the (1-based) index 
     var dateStyleIndex = numberingFormats.ToList().IndexOf(dateFormat) + 1; 
     var worksheetPart = GetWorksheetPartByName(spreadsheetDoc, "Sheet1"); 

     Row row1 = worksheetPart.Worksheet.GetFirstChild<SheetData>().Elements<Row>().FirstOrDefault(); 
     Cell cell = row1.Elements<Cell>().FirstOrDefault(); 

     DateTime dateTime = DateTime.Parse(text); 
     double oaValue = dateTime.ToOADate(); 
     cell.CellValue = new CellValue(oaValue.ToString(CultureInfo.InvariantCulture)); 

     cell.StyleIndex = Convert.ToUInt32(dateStyleIndex); 

     worksheetPart.Worksheet.Save(); 
     spreadsheetDoc.WorkbookPart.WorkbookStylesPart.Stylesheet.Save(); 
    } 
    Console.ReadKey(); 
} 

Wo GetWorksheetPartByName ist:

private static WorksheetPart GetWorksheetPartByName(SpreadsheetDocument document, string sheetName) 
{ 
    IEnumerable<Sheet> sheets = 
     document.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>().Where(s => s.Name == sheetName); 

    if (!sheets.Any()) 
    { 
     // The specified worksheet does not exist. 
     return null; 
    } 

    string relationshipId = sheets.First().Id.Value; 
    WorksheetPart worksheetPart = (WorksheetPart)document.WorkbookPart.GetPartById(relationshipId); 
    return worksheetPart; 
} 

Daten in Excel sind gerade Anzahl von Tagen ab dem Standarddatum. Berechnen Sie die einzufügende Zahl und wenden Sie dann das gewünschte Styling auf die Zelle an.

Verwandte Themen