2017-05-18 1 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;@"; 

을 변경하지만 지금 날짜가 XX-01-1900 누군가가 올바른 방향으로 날 지점 수 있다면 달 및 연도가 좋은 것 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(); 
} 

에 날짜를 추가하고있다. 삽입 할 숫자를 계산 한 다음 원하는 스타일을 셀에 적용합니다.

관련 문제