2017-05-18 10 views
2

データ書式を使用してExcelシートを書き込もうとしています。私はここで言及した論理を使用しましたhttps://www.codeproject.com/Articles/877791/How-to-Create-Large-Excel-File-using-OpenxmlOpenXMLWriterを使用しているときにExcelでDateFormatを発行する

私が直面している問題は、英国の形式のDD-MM-YYYYである必要があります。だから私は

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;@"; 

を変更しました。しかし、今日は、誰かが正しい方向に私を指すことができれば素晴らしいことだ月と年が01と1900

をデフォルトされているXX-01から1900として出てきます。

答えて

1

私のために、次の作品:Excelで

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; 
} 

日付はデフォルトの日付からの日数の数だけある: 私はGetWorksheetPartByNameがある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(); 
} 

に日付を追加しています。挿入する番号を計算し、セル上に目的のスタイリングを適用します。

関連する問題