예제 #1
0
            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);
                                }
                            }
                        }
                    }
                }
            }
예제 #2
0
            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);
            }