iroon 님, 안녕하세요.
그레이프시티입니다.
문의하신 사항에 대하여 다음과 같이 답변드립니다.
대신, TruncateEmptyRowsAndColumns 옵션을 적용하여 OpenExcel한 것과 같은 효과를 얻기 위한 두 가지 방법을 공유 드립니다.
FarPoint.Win.Spread.FpSpread tempSpread = new FarPoint.Win.Spread.FpSpread(fpSpread1.LegacyBehaviors);
tempSpread.OpenExcel(fileName, FarPoint.Excel.ExcelOpenFlags.TruncateEmptyRowsAndColumns);
tempSpread.Sheets[0].SheetName = "교통량 자료";
fpSpread1.Sheets.Add(tempSpread.Sheets[0]);
2) 시트에 파일을 불러온 후, 빈 행/열을 제거하는 방법
fpSpread1.AddNewSheetView();
fpSpread1.ActiveSheetIndex = 1;
fpSpread1.ActiveSheet.OpenExcel(fileName, "Sheet1");
fpSpread1.ActiveSheet.SheetName = "교통량 자료";
fpSpread1.ActiveSheet.RowCount = fpSpread1.ActiveSheet.AsWorksheet().UsedRange.Row2 + 1;
fpSpread1.ActiveSheet.ColumnCount = fpSpread1.ActiveSheet.AsWorksheet().UsedRange.Column2 + 1;
Q2. 엑셀 파일의 헤더를 시트 헤더로 쓰는 방법
혹시 엑셀 파일의 헤더가 틀 고정되어있는 상태일까요?
틀 고정되어있는 상태라면 FpSpread 클래스의 OpenExcel 메서드 호출 시, ExcelOpenFlags.RowHeaders 옵션을 지정하여, 엑셀파일에서 틀 고정된 행을 시트의 헤더로 사용할 수 있습니다.
아래 샘플 코드를 참고 부탁드립니다. (Q1의 1번 방법 활용)
FarPoint.Win.Spread.FpSpread tempSpread = new FarPoint.Win.Spread.FpSpread(fpSpread1.LegacyBehaviors);
tempSpread.OpenExcel(fileName, FarPoint.Excel.ExcelOpenFlags.RowHeaders);
tempSpread.Sheets[0].SheetName = "교통량 자료";
fpSpread1.Sheets.Add(tempSpread.Sheets[0]);
만약 틀 고정이 되어있지 않다면, 수동으로 작업을 해주셔야 합니다.
이때, SheetView.GetSpanCell(int row, int column) 메서드를 활용하여, 병합된 셀일 경우 병합된 셀 영역(CellRange)을 가져올 수 있습니다.
아래 샘플 코드를 개발 시 참고 부탁 드립니다.
// 특정 행 범위를 ColumnHeader로 변환합니다.
convertToColumnHeader(2, fpSpread1.Sheets[1]);
private void convertToColumnHeader(int columnHeaderRowCount, FarPoint.Win.Spread.SheetView sv)
{
// 1. ColumnHeader로 만들 영역에서 병합된 셀을 찾습니다.
int columnCount = sv.AsWorksheet().UsedRange.Column2 + 1;
HashSet<FarPoint.Win.Spread.Model.CellRange> cellRanges = new HashSet<FarPoint.Win.Spread.Model.CellRange>();
for (int i = 0; i < columnHeaderRowCount; i++)
{
for (int j = 0; j < columnCount; j++)
{
if (sv.GetSpanCell(i, j) is not null)
{
cellRanges.Add(sv.GetSpanCell(i, j));
}
}
}
// 2. ColumnHeader의 셀을 병합합니다.
sv.ColumnHeaderRowCount = columnHeaderRowCount;
foreach (FarPoint.Win.Spread.Model.CellRange cellRange in cellRanges)
{
sv.AddColumnHeaderSpanCell(cellRange.Row, cellRange.Column, cellRange.RowCount, cellRange.ColumnCount);
}
// 3. CelumnHeader 텍스트를 설정합니다.
for (int i = 0; i < columnHeaderRowCount; i++)
{
for (int j = 0; j < columnCount; j++)
{
sv.ColumnHeader.Cells[i, j].Value = sv.Cells[i, j].Value;
}
}
// 4. 데이터 영역에서 ColumnHeader로 변환한 부분을 제거합니다.
sv.RemoveRows(0, columnHeaderRowCount);
}
추가로 궁금하신 내용이 있다면, 문의주시기 바랍니다.
감사합니다.
그레이프시티 드림