! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

엑셀파일 오픈시 헤더 > Q&A | 토론

본문 바로가기

Spread.NET

Q&A | 토론

WinForms윈폼 엑셀파일 오픈시 헤더

페이지 정보

작성자 iroon 작성일 2023-08-21 17:56 조회 431회 댓글 1건
제품 버전 : Spread.NET 16
컨트롤 이름 : Fpspread

본문

첨부파일

FirSprd.AddNewSheetView();

FirSprd.ActiveSheetIndex = 1;

FirSprd.Sheets[1].OpenExcel(fileName, "Sheet1");

FirSprd.Sheets[1].SheetName = "교통량자료";


이런 식으로 파일을 열고 있습니다.


여기서 엑셀파일의 헤더를 시트 헤더로 쓰고 싶습니다.


게다가 엑셀의 헤더가 아래 동봉한 그림처럼 스판된 두줄의 자료인데 방법이 있을까요?





  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

iroon님의 댓글

iroon 작성일

그리고
FirSprd.Sheets[1].OpenExcel(fileName, 0);  이 함수를 사용할때
FarPoint.Excel.ExcelOpenFlags.TruncateEmptyRowsAndColumns 이 옵션을 어떻게 사용하나요?

1 답변

WinForms윈폼 Re: 엑셀파일 오픈시 헤더

추천0 이 글을 추천하셨습니다 비추천0 채택채택

페이지 정보

작성자 GCK써니 작성일 2023-08-22 17:43 댓글 2건

본문

iroon 님, 안녕하세요.

그레이프시티입니다.


문의하신 사항에 대하여 다음과 같이 답변드립니다.


Q1. (댓글 문의) 엑셀파일의 특정 시트를 불러올 때, ExcelOpenFlags 옵션을 적용하는 방법

아쉽게도, SheetView 클래스의 OpenExcel 메서드를 호출할 때에는 ExcelOpenFlags 옵션을 적용할 수 없습니다. 

대신, TruncateEmptyRowsAndColumns 옵션을 적용하여 OpenExcel한 것과 같은 효과를 얻기 위한 두 가지 방법을 공유 드립니다.


1) 임시 Spread를 이용하는 방법
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);
}


추가로 궁금하신 내용이 있다면, 문의주시기 바랍니다.

감사합니다.

그레이프시티 드림

댓글목록

iroon님의 댓글

iroon 작성일

Truncate 는 불러서 자르는 2) 번이 깔끔하네요.
헤더 사용역시 수동으로 만들어 주신 함수를 사용하는게 틀고정 여부와 관련없이 사용할 수 있어서 좋습니다.
항상 감사합니다.

GCK써니님의 댓글의 댓글

GCK써니 작성일

상세한 피드백 감사드립니다. :D

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.