public override void DataToExcel(DataDictionaryList data, bool delete = false) { var indexedData = data.IndexById(); var restIds = new HashSet <string>(indexedData.Keys); var indexedRows = new Dictionary <string, Row>(); var rows = Worksheet.Descendants <Row>(); foreach (var row in rows.Where(row => row.RowIndex >= ColumnNamesRowIndex + 1)) { var idCellReference = IdColumnIndex + row.RowIndex.ToString(); var idCell = (Cell)row.FirstOrDefault(cell => ((Cell)cell).CellReference.Value == idCellReference); if (idCell == null) { continue; } var id = SeedTableCell.ValueString(idCell, SharedStringTable); indexedRows[id] = row; Dictionary <string, object> rowData; if (indexedData.TryGetValue(id, out rowData)) { restIds.Remove(id); var columnIndexToName = ColumnIndexToName(row.RowIndex.ToString()); foreach (Cell cell in row) { // 数式セルは飛ばす if (cell.CellFormula != null) { continue; } string columnName; if (columnIndexToName.TryGetValue(cell.CellReference.Value, out columnName)) { object value; if (rowData.TryGetValue(columnName, out value)) { SeedTableCell.SetValue(cell, Convert.ToString(value), SharedStringTable); } } } } } }
Dictionary <string, object> GetCellValuesDictionary(Row row) { var columnIndexToName = ColumnIndexToName(row.RowIndex.ToString()); var restColumnCount = Columns.Count; var cellValues = new Dictionary <string, object>(DefaultRowData); foreach (Cell cell in row) { string columnName; if (columnIndexToName.TryGetValue(cell.CellReference.Value, out columnName)) { --restColumnCount; cellValues[columnName] = SeedTableCell.Value(cell, SharedStringTable); // カラム数分たまったら読み出しを打ち切る if (restColumnCount == 0) { break; } } } return(cellValues); }