programing

Excel 파일 c#에서 새 워크시트를 생성하는 방법은?

goodsources 2023. 9. 8. 21:26
반응형

Excel 파일 c#에서 새 워크시트를 생성하는 방법은?

아주 큰 엑셀 파일을 만들어야 하는데, 워크시트 하나에 엑셀 파일은 65k 행까지 포함할 수 있습니다.그래서, 저는 저의 모든 정보를 동적인 여러 워크시트로 나누고 싶습니다.이것은 나의 대략적인 코드입니다.

 //------------------Create Excel App--------------------
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;

xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(numberOfLetters);

     foreach (string letter in letters)
     {
      xlWorkSheet.Cells[rowIndex, 1] = letter; 
      rowIndex++;
     }

xlWorkBook.SaveAs(pathXL, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();

각 루프 안에 새 워크시트를 추가하고 일부 조건을 사용하여 워크시트에 이름을 지정하는 방법(목록 페이지 하단의 Excel에서 볼 수 있는 사용자)

그런 분들이.

    foreach (string letter in letters)
    {
      if (letter == SOME)
      {
        AddNewWorksheet and give name SOME
      }
        xlWorkSheet.Cells[rowIndex, 1] = letter; 
        rowIndex++;
    }

그리고 마지막에 모든 워크시트를 저장하는 방법은 무엇입니까?

워크북에 새 워크시트를 추가하려면 다음 코드를 사용합니다.

var xlSheets = xlWorkBook.Sheets as Excel.Sheets;
var xlNewSheet = (Excel.Worksheet)xlSheets.Add(xlSheets[1], Type.Missing, Type.Missing, Type.Missing);
xlNewSheet.Name = "newsheet";

// Uncomment a line below if you want the inserted sheet to be the last one
//xlWorkBook.Sheets.Move(After: xlWorkBook.Sheets.Count);

워크북 호출 저장하기Save()방법:

xlWorkBook.Save();

이것은 MSDN에 부여된 정확한 코드입니다.

Excel.Worksheet newWorksheet;
newWorksheet = (Excel.Worksheet)Globals.ThisWorkbook.Worksheets.Add(
    missing, missing, missing, missing);

자세한 내용은 링크를 클릭해 주세요.

General(일반) 새 시트를 작성하려면 다음 작업만 수행합니다.

var worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add();

아래와 같은 워크북을 이미 작성했습니다.

var workbook = excel.Workbooks.Add(Type.Missing);

.xls의 경우 65,000개의 레코드로 제한되지만, 2003.xls를 넘어 2007.xlsx 이상으로 "허용"된다면 훨씬 더 많은 행을 가질 수 있습니다.

참고 사항, 질문과 무관하지만 얼마 전에 NPOI 라이브러리를 사용하여 이름을 바꾼 RDLC 및 시트 이름 문제를 해결하기 위해 내보냈습니다. 그 이후로 NPOI를 훨씬 더 많이 사용하기 시작했기 때문에 무료/오픈 소스이며 매우 강력합니다(Java POI에서 .net NPOI로 포팅됨). 하지만 질문의 일부는 아닙니다.이것을 하는 데 대한 예시가 있다면 놀랐습니다(아니요, 저는 그들을 위해 일하지 않습니다) http://npoi.codeplex.com/

시트 이름을 바꾸기 위해 작성한 코드는 다음과 같습니다(결국 다른 메모리 스트림으로 시트를 다시 만듭니다.

------------------------------------------------------------
var excelHelper = new ExcelHelper(bytes);
bytes = excelHelper.RenameTabs("Program Overview", "Go Green Plan", "Milestones", "MAT and EOC", "Annual Financials", "Risk Log", "Risk & Opportunity Log", "RAIL", "Meeting Minutes");

Response.BinaryWrite(bytes);
Response.End();
------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using NPOI.HSSF.UserModel;


namespace Company.Project.Core.Tools
{
    public class ExcelHelper
    {
        private byte[] _ExcelFile;

        public ExcelHelper(byte[] excelFile)
        {
            _ExcelFile = excelFile;
        }

        public byte[] RenameTabs(params string[] tabNames)
        {
            byte[] bytes = null;

            using (MemoryStream ms = new MemoryStream())
            {
                ms.Write(_ExcelFile, 0, _ExcelFile.Length);
                var workBook = new HSSFWorkbook(ms, true);

                if (tabNames != null)
                {
                    using (MemoryStream memoryStream = new MemoryStream())
                    {
                        for (int i = 0; i < tabNames.Length; i++)
                        {
                            workBook.SetSheetName(i, tabNames[i]);
                        }
                        workBook.Write(memoryStream);
                        bytes = memoryStream.ToArray();
                    }
                }
            }
            _ExcelFile = bytes;
            return bytes;
        }
    }

언급URL : https://stackoverflow.com/questions/16705651/how-to-create-a-new-worksheet-in-excel-file-c

반응형