저장 - c# 엑셀 파일 생성




C#에서 Excel(.XLS 및.XLSX) 파일 만들기 (20)

코드를 실행하는 컴퓨터에 Excel을 설치하지 않고 C #으로 Excel 스프레드 시트를 만들려면 어떻게해야합니까?


C #에서 Excel 파일을 만드는 가장 간단하고 빠른 방법은 Open XML Productivity Tool을 사용하는 것입니다. Open XML Productivity Tool은 Open XML SDK 설치와 함께 제공됩니다. 이 도구는 모든 Excel 파일을 C # 코드로 리버스 엔지니어링합니다. 그런 다음 C # 코드를 사용하여 해당 파일을 다시 생성 할 수 있습니다.

관련된 프로세스의 개요는 다음과 같습니다.

  1. 도구와 함께 Open XML SDK를 설치하십시오.
  2. 원하는 모양으로 최신 Excel 클라이언트를 사용하여 Excel 파일을 만듭니다. 이름을 DesiredLook.xlsx 지정하십시오.
  3. 도구를 사용하여 DesiredLook.xlsx 열고 맨 위에있는 Reflect Code 버튼을 클릭하십시오.
  4. 파일의 C # 코드는 도구의 오른쪽 창에서 생성됩니다. 이것을 C # 솔루션에 추가하고 원하는 모양으로 파일을 생성하십시오.

보너스로이 방법은 모든 Word 및 PowerPoint 파일에 적용됩니다. C # 개발자는 필요에 맞게 코드를 변경합니다.

이 목적으로 Windows에서 실행되는 github에 간단한 WPF 응용 프로그램을 개발했습니다. 생성 된 코드를 붙여 넣을 수있는 GeneratedClass 라는 자리 표시 자 클래스가 있습니다. 한 버전의 파일로 돌아 가면 다음과 같은 Excel 파일이 생성됩니다.




ExcelLibrary라는 라이브러리를 사용할 수 있습니다. Google 코드에 게시 된 무료 오픈 소스 라이브러리입니다.

ExcelLibrary

이것은 위에서 언급 한 PHP ExcelWriter의 포트처럼 보입니다. 아직 새로운 .xlsx 형식으로 쓰지는 않겠지 만 그 기능을 추가하려고합니다.

아주 간단하고 작고 사용하기 쉽습니다. 또한 DataSetHelper를 사용하여 DataSet 및 DataTable을 사용하여 Excel 데이터로 쉽게 작업 할 수 있습니다.

ExcelLibrary는 이전 Excel 형식 (.xls 파일)에 대해서만 계속 작동하는 것으로 보이지만, 향후 더 새로운 2007/2010 형식에 대한 지원을 추가 할 수 있습니다.

EPPlus 는 Excel 2007/2010 형식 파일 (.xlsx 파일)에서만 작동합니다.

주석에 언급 된대로 각 라이브러리에는 몇 가지 알려진 버그가 있습니다. 결국, EPPlus는 시간이 지남에 따라 최고의 선택 인 것처럼 보입니다. 그것은보다 적극적으로 업데이트되고 문서화 된 것으로 보인다.

또한 아래의 @ АртёмЦарионов에서 언급했듯이 EPPlus는 피벗 테이블을 지원하며 ExcelLibrary는 일부 지원을 할 수 있습니다 ( ExcelLibrary의 피벗 테이블 문제 )

다음은 빠른 참조를위한 몇 가지 링크입니다.
ExcelLibrary - GNU Lesser GPL
EPPlus - GNU 약소 일반 공중 사용 허가서 (LGPL)

다음은 ExcelLibrary에 대한 몇 가지 예제 코드입니다.

다음은 데이터베이스에서 데이터를 가져 와서 통합 문서를 만드는 예제입니다. ExcelLibrary 코드는 아래쪽의 한 줄입니다.

//Create the data set and table
DataSet ds = new DataSet("New_DataSet");
DataTable dt = new DataTable("New_DataTable");

//Set the locale for each
ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;

//Open a DB connection (in this example with OleDB)
OleDbConnection con = new OleDbConnection(dbConnectionString);
con.Open();

//Create a query and fill the data table with the data from the DB
string sql = "SELECT Whatever FROM MyDBTable;";
OleDbCommand cmd = new OleDbCommand(sql, con);
OleDbDataAdapter adptr = new OleDbDataAdapter();

adptr.SelectCommand = cmd;
adptr.Fill(dt);
con.Close();

//Add the table to the data set
ds.Tables.Add(dt);

//Here's the easy part. Create the Excel worksheet from the data set
ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", ds);

Excel 파일을 만드는 것은 그만큼 쉽습니다. 수동으로 Excel 파일을 만들 수도 있지만 위의 기능이 정말 인상 깊었습니다.


OLEDB를 사용하여 Excel 파일을 만들고 조작 할 수 있습니다. 이것을 확인하십시오 : OLEDB를 사용하여 Excel을 읽고 쓰십시오 .

대표적인 예 :

using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\temp\\test.xls;Extended Properties='Excel 8.0;HDR=Yes'"))
{
  conn.Open();
  OleDbCommand cmd = new OleDbCommand("CREATE TABLE [Sheet1] ([Column1] string, [Column2] string)", conn);
  cmd.ExecuteNonQuery();
}

편집 - 더 많은 링크 :


OpenXML은 서버에 MS Excel을 설치하지 않는 데 도움이되는 좋은 대안입니다. Microsoft에서 제공하는 Open XML SDK 2.0은 Open XML 패키지 및 패키지 내의 기본 Open XML 스키마 요소를 조작하는 작업을 단순화합니다. Open XML API (Application Programming Interface)는 개발자가 Open XML 패키지에서 수행하는 많은 일반적인 작업을 요약합니다.

이것을 확인하십시오 OpenXML : 서버에 MS Excel 설치를 피할 수있는 대안


xlsx 형식에 만족하면 내 codeplex GitHub 프로젝트를 사용해보십시오. EPPlus . ExcelPackage의 소스로 시작했지만 오늘은 완전히 다시 작성되었습니다. 범위, 셀 스타일, 차트, 도형, 그림, 네임 영역, 자동 필터 및 기타 많은 것들을 지원합니다.


그리고 Microsoft Office 용 Open XML SDK 2.0은 어떻게 사용합니까?

몇 가지 이점 :

  • Office 설치 필요 없음
  • Microsoft = 괜찮은 MSDN 설명서 제작
  • 프로젝트에서 사용할 .Net dll
  • SDK에는 diff, 유효성 검사기 등과 같은 많은 도구가 함께 제공됩니다.

모래밭:


내가 사용한 몇 가지 옵션 :

XLSX가 필수 인 경우 : ExcelPackage 는 좋은 시작이지만 개발자가 작업을 종료 할 때 종료되었습니다. ExML은 거기에서 픽업하고 몇 가지 기능을 추가했습니다. ExML 은 나쁜 옵션이 아닙니다. 아직 두 개의 프로덕션 웹 사이트에서 사용하고 있습니다.

모든 새로운 프로젝트에서 poi.apache.org 의 .NET 포트 인 NPOI 를 사용하고 있습니다. NPOI 2.0 (Alpha) 은 XLSX도 지원합니다.


다양한 Office 2003 XML 라이브러리는 작은 Excel 파일에서도 사용할 수 있습니다. 그러나 XML 형식으로 저장된 큰 통합 문서의 크기가 문제가 될 수 있습니다. 예를 들어, 필자가 작업하는 통합 문서는 새로운 (그리고 확실히 밀접하게 압축 된) XLSX 형식의 40MB가 360MB XML 파일이됩니다.

필자의 연구에서 필자가 취한 것처럼, 오래된 바이너리 파일 형식으로 출력 할 수있는 상용 패키지가 두 가지있다. 그들은:

어느 쪽도 싸지 않다 (500USD와 800USD 각각, 나는 생각한다). 그러나 둘 다 Excel 자체에 독립적입니다.

내가 궁금해 할 점은 오픈 오피스 (OpenOffice.org)와 같은 엑셀 출력 모듈이다. Java에서 .Net으로 이식 할 수 있는지 궁금합니다.


다음은 OpenXML 라이브러리를 사용하여 DataSet , DataTable 또는 List<> 에서 정품 Excel 2007 .xlsx 파일로 내보낼 수있는 완전히 무료 인 C # 라이브러리입니다.

http://mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm

전체 소스 코드는 지침과 데모 애플리케이션과 함께 무료로 제공됩니다.

이 클래스를 응용 프로그램에 추가 한 후에는 한 줄의 코드로 DataSet을 Excel로 내보낼 수 있습니다.

CreateExcelFile.CreateExcelDocument(myDataSet, "C:\\Sample.xlsx");

그것보다 훨씬 간단하지 않습니다 ...

또한 서버에 엑셀이 존재하지 않아도됩니다.


매우 가벼운 옵션은 HTML 테이블을 사용하는 것일 수 있습니다. 파일에 head, body 및 table 태그를 만들고 확장자가 .xls 인 파일로 저장하면됩니다. 수식을 포함하여 출력의 스타일을 지정하는 데 사용할 수있는 Microsoft 고유의 특성이 있습니다.

웹 응용 프로그램에서는이 코드를 코딩하지 않을 수도 있지만 HTML 표를 통해 Excel 파일을 작성한 example 있습니다. 이 기술은 콘솔 앱, 데스크톱 앱 또는 서비스를 코딩하는 데 사용할 수 있습니다.


실크를 시도해 봤어?

우리는 sylk로 고전 ASP에서 엑셀 시트를 생성하는 데 사용했고 지금은 excelgenerater를 찾고 있습니다.

sylk의 장점은 셀을 포맷 할 수 있다는 것입니다.


이 라이브러리를 사용하여 멋지게 형식화 된 Excel 파일을 만들 수 있습니다 : http://officehelper.codeplex.com/documentation
아래 샘플을 참조하십시오.

using (ExcelHelper helper = new ExcelHelper(TEMPLATE_FILE_NAME, GENERATED_FILE_NAME))
{
    helper.Direction = ExcelHelper.DirectionType.TOP_TO_DOWN;
    helper.CurrentSheetName = "Sheet1";
    helper.CurrentPosition = new CellRef("C3");

    //the template xlsx should contains the named range "header"; use the command "insert"/"name".
    helper.InsertRange("header");

    //the template xlsx should contains the named range "sample1";
    //inside this range you should have cells with these values:
    //<name> , <value> and <comment>, which will be replaced by the values from the getSample()
    CellRangeTemplate sample1 = helper.CreateCellRangeTemplate("sample1", new List<string> {"name", "value", "comment"}); 
    helper.InsertRange(sample1, getSample());

    //you could use here other named ranges to insert new cells and call InsertRange as many times you want, 
    //it will be copied one after another;
    //even you can change direction or the current cell/sheet before you insert

    //typically you put all your "template ranges" (the names) on the same sheet and then you just delete it
    helper.DeleteSheet("Sheet3");
}        

샘플은 다음과 같습니다.

private IEnumerable<List<object>> getSample()
{
    var random = new Random();

    for (int loop = 0; loop < 3000; loop++)
    {
        yield return new List<object> {"test", DateTime.Now.AddDays(random.NextDouble()*100 - 50), loop};
    }
}

직접 문제를 해결하는 타사 솔루션에 다른 참조를 추가하고 싶습니다. http://www.officewriter.com

(면책 조항 : 저는 OfficeWriter를 만드는 SoftArtisans를 위해 일합니다)




ExcelXmlWriter 를 사용할 수 있습니다.

그것은 잘 작동합니다.


SpreadsheetGear for .NET 은 상용 솔루션입니다.

라이브 ASP.NET (C # 및 VB) 샘플을 here 에서보고 평가판을 다운로드 할 수 here .

면책 조항 : SpreadsheetGear LLC를 소유하고 있습니다.


Syncfusion Essential XlsIO가이 를 수행 할 수 있습니다. Microsoft Office에 대한 의존성이 없으며 여러 플랫폼에 대한 특정 지원도 제공합니다.

코드 샘플 :

//Creates a new instance for ExcelEngine.
ExcelEngine excelEngine = new ExcelEngine();
//Loads or open an existing workbook through Open method of IWorkbooks
IWorkbook workbook = excelEngine.Excel.Workbooks.Open(fileName);
//To-Do some manipulation|
//To-Do some manipulation
//Set the version of the workbook.
workbook.Version = ExcelVersion.Excel2013;
//Save the workbook in file system as xlsx format
workbook.SaveAs(outputFileName);

자격을 취득하면 커뮤니티 라이센스 프로그램을 통해 무료로 사용할 수 있습니다 (매출 1 백만 달러 미만). 참고 : 나는 Syncfusion을 위해 일합니다.





file-io