/// <summary> /// DataGridViewをExcelワークシートに変換します。 /// </summary> /// <param name="grid">変換元のDataGridView</param> /// <param name="worksheet">変換先のExcelワークシート</param> public void Convert(DataGridView grid, ref Worksheet worksheet) { this.SetColumn(grid, ref worksheet); this.SetValue(grid, ref worksheet); return; }
/// <summary> /// DataGridViewから、Excelの値に関する設定を行います。 /// </summary> /// <param name="grid">変換元のDataGridViewオブジェクト</param> /// <param name="worksheet">変換先のExcelワークシート</param> private void SetValue(DataGridView grid, ref Worksheet worksheet) { // グリッド行でループ処理 int excelRowIndex = 2; foreach (DataGridViewRow gridRow in grid.Rows) { // 非表示なら処理しない if (false == gridRow.Visible) { continue; } // グリッド列でループ処理 int excelColumnIndex = 1; foreach (DataGridViewColumn gridColumn in grid.Columns) { // 非表示なら処理しない if (false == gridColumn.Visible) { continue; } // セル設定 dynamic cell = worksheet.Cells[excelRowIndex, excelColumnIndex]; DataGridViewCell gridCell = gridRow.Cells[gridColumn.Index]; cell.Value = gridCell.Value; this.SetFormat(gridCell, ref cell); this.SetCellBackColor(gridCell.Style.BackColor, ref cell); ++excelColumnIndex; } ++excelRowIndex; } return; }
/// <summary> /// DataGridViewから、Excelの列に関する設定を行います。 /// </summary> /// <param name="grid">変換元のDataGridViewオブジェクト</param> /// <param name="worksheet">変換先のExcelワークシート</param> private void SetColumn(DataGridView grid, ref Worksheet worksheet) { int excelColumnIndex = 1; foreach (DataGridViewColumn gridColumn in grid.Columns) { // 非表示なら処理しない if (false == gridColumn.Visible) { continue; } dynamic cell = worksheet.Cells[1, excelColumnIndex]; dynamic columnRange = cell.EntireColumn; // 列全体の設定 columnRange.ColumnWidth = gridColumn.Width / columnRange.Font.Size * 2; this.SetFormat(gridColumn, ref columnRange); this.SetCellBackColor(gridColumn.DefaultCellStyle.BackColor, ref columnRange); this.SetHorizontalAlignment(gridColumn.DefaultCellStyle.Alignment, ref columnRange); // 列見出しの設定 cell.Value = gridColumn.HeaderText; this.SetCellBackColor(gridColumn.HeaderCell.Style.BackColor, ref cell); this.SetHorizontalAlignment(gridColumn.HeaderCell.Style.Alignment, ref columnRange); ++excelColumnIndex; } return; }