SpreadsheetDocument doc = SpreadsheetDocument.Open(fileInfo.LocalFilePath, false);
WorkbookPart workbookPart = doc.WorkbookPart;
Sheet sheet = workbookPart.Workbook.Sheets.GetFirstChild();
Worksheet worksheet = (doc.WorkbookPart.GetPartById(sheet.Id.Value) as WorksheetPart).Worksheet;
SharedStringTablePart stringTablePart = doc.WorkbookPart.SharedStringTablePart;
IEnumerable rows = worksheet.GetFirstChild().Descendants();
SetObtainOrderExcelHD(rows, stringTablePart);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
private void SetObtainOrderExcelHD(IEnumerable rows, SharedStringTablePart stringTablePart)
{
List<List> listRow = new List<List>();
List listCell = null;
foreach (Row row in rows)
{
//첫번째 해더는 버리기(셀 타이틀이라서)
if (row.RowIndex.Value == 1)
{
continue;
}
listCell = new List();
for (int i = 0; i < row.Descendants().Count(); i++)
{
listCell.Add(GetCellValue(row.Descendants().ElementAt(i), stringTablePart));
}
listRow.Add(listCell);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public string GetCellValue(DocumentFormat.OpenXml.Spreadsheet.Cell cell, SharedStringTablePart stringTablePart)
{
string value = string.Empty;
if (cell.CellValue != null)
{
value = cell.CellValue.InnerXml;
if (cell.DataType != null && cell.DataType.Value == CellValues.SharedString)
{
value = stringTablePart.SharedStringTable.ChildElements[Int32.Parse(value)].InnerText;
}
//날짜 데이터는 아래와 같이 해줘야함.
if (cell.StyleIndex != null && "8".Equals(cell.StyleIndex.InnerText))
{
if (!string.IsNullOrEmpty(value))
{
DateTime cellDate = DateTime.FromOADate(Convert.ToDouble(cell.CellValue.InnerText));
if (cellDate != null)
{
value = cellDate.ToString("yyyy-MM-dd");
}
}
}
}
return value;
}
'API > C#' 카테고리의 다른 글
OpenXML Excel Write Download (0) | 2019.12.10 |
---|---|
C# Instagram API (1) | 2018.05.04 |