[개발] C#, .Net

[C#, fpSpread] 엑셀 파일 생성, 엑셀 다운로드, 엑셀 그린 후 다운로드 코드

  • -
반응형

언제쓰는가?

C#, .Net환경에서

스프레드에 출력된 데이터를 엑셀로 옮긴 후 그대로 다운로드하고 싶은 경우에 사용

  public static void DownloadExcel(FpSpread fpSpread, string title = "")
     {

        string msg = "";

        if (string.IsNullOrEmpty(title))
        {
            msg = "엑셀을 다운로드하시겠습니까?";
        }
        else
        {
            msg = $@"{title} 을(를) 엑셀로 다운로드하시겠습니까?";
        }

        if (MessageBox.Show(msg, "엑셀파일작성", MessageBoxButtons.YesNo).Equals(DialogResult.No))
        {
            return;
        }

        // 제거할 특수 문자 목록
        char[] invalidChars = { '<', '>', '?', '[', ']', ':', '|', '*', '"' };

        // 특수 문자를 제거하고 공백을 추가한 새 파일 이름 생성
        string transformedTitle = new string(title.Select(c => invalidChars.Contains(c) ? ' ' : c).ToArray());

        // 저장 대화상자를 생성하고 사용자에게 파일 경로를 선택하도록 합니다.
        SaveFileDialog sfd = new SaveFileDialog();
        sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // 바탕화면으로 설정
        sfd.Filter = "Excel files (*.xlsx)|*.xlsx|All files (*.*)|*.*";
        sfd.FilterIndex = 1;
        sfd.FileName = transformedTitle + ".xlsx"; // 파일 이름 설정

        if (sfd.ShowDialog() == DialogResult.OK)
        {
            string fileName = sfd.FileName;

            // 엑셀 객체 생성
            Excel.Application excelApp = new Excel.Application();
            excelApp.Visible = false;
            Excel.Workbook workbook = excelApp.Workbooks.Add();
            Excel.Worksheet worksheet = workbook.Sheets[1];

            // 컬럼 셀의 숫자 형식을 Text로 설정
            worksheet.Columns.NumberFormat = "@";

            // 스프레드 복제
            FarPoint.Win.Spread.FpSpread spread = new FarPoint.Win.Spread.FpSpread();
            spread.Sheets.Add(fpSpread.Sheets[0].Clone());

            // 첫번째 줄 제목 세팅
            if (!string.IsNullOrEmpty(title))
            {
                //SetSpreadTitle(spread, title);
                SetSpreadTitle(spread, title, worksheet);
            }

            // 헤더 입력
            var columnHeader = spread.Sheets[0].ColumnHeader;
            int headerRowCount = columnHeader.Rows.Count;

            for (int row = 0; row < headerRowCount; row++)
            {
                for (int col = 0; col < columnHeader.Columns.Count; col++)
                {
                    // 헤더 셀 값 설정
                    var cell = worksheet.Cells[row + 1, col + 1];
                    cell.Value = columnHeader.Cells[row, col].Text;
                    // 헤더 셀 가운데 정렬
                    cell.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
                }
            }

            int rowCount = spread.Sheets[0].RowCount;
            int columnCount = spread.Sheets[0].ColumnCount;
            object[,] cellValues = new object[rowCount, columnCount];

            for (int rowIndex = 0; rowIndex < rowCount; rowIndex++)
            {
                for (int colIndex = 0; colIndex < columnCount; colIndex++)
                {
                    object cellValue = spread.Sheets[0].Cells[rowIndex, colIndex].Value;

                    cellValues[rowIndex, colIndex] = cellValue != null ? Convert.ToString(cellValue) : "";
                }
            }

            // Excel에 배열 값 할당
            Excel.Range startCell = worksheet.Cells[headerRowCount + 1, 1];
            Excel.Range endCell = worksheet.Cells[headerRowCount + rowCount, columnCount];
            Excel.Range writeRange = worksheet.Range[startCell, endCell];

            writeRange.Value = cellValues;

            // 컬럼 자동 맞춤
            worksheet.Columns.AutoFit();

            // 변경 사항 저장 및 Excel 종료
            workbook.SaveAs(fileName);
            workbook.Close();
            excelApp.Quit();

            MessageBox.Show("다운로드가 완료되었습니다.", "확인", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.