Excel 가져 오기 및 내보내기-가장 좋은 라이브러리는 무엇입니까? [닫은]


180

C #의 ASP.NET 응용 프로그램 중 하나에서 특정 데이터 수집 (SubSonic 수집)을 가져와 Excel로 내 보냅니다. 또한 특정 형식으로 Excel 파일을 가져오고 싶습니다. 이 목적으로 사용할 수있는 라이브러리를 찾고 있습니다.

요구 사항 :

  • Excel 2007 파일 (Excel 2003은 64k 개 이상의 행을 지원합니까? 그 이상이 필요합니다.)
  • 서버에 Excel이 필요하지 않습니다
  • 형식화 된 컬렉션을 가져 와서 가능한 경우 Excel에서 숫자 필드를 숫자로 입력하려고합니다.
  • 큰 파일 (100k-10M)과 충분히 잘 작동합니다.
  • GUID를 내보낼 때 충돌하지 않습니다!
  • 많은 비용이 들지 않습니다 (aspose와 같은 엔터프라이즈 라이브러리 없음). 무료는 항상 훌륭하지만 상업용 라이브러리가 될 수 있습니다.

어떤 도서관을 추천하십니까? 대량의 데이터에 사용 했습니까? 다른 해결책이 있습니까?

현재 Excel에서 나중에로드하는 HTML을 생성하는 간단한 도구를 사용하고 있지만 일부 기능이 손실되고 있으며 Excel을로드 할 때 불평합니다. 차트 또는 이와 유사한 것을 생성 할 필요가 없으며 원시 데이터 만 내보내십시오.

플랫 CSV 파일을 생각하고 있지만 Excel은 고객 요구 사항입니다. Excel로 변환하거나 Excel에서 변환하는 도구가 있으면 CSV로 직접 작업 할 수 있습니다. Excel 2007은 XML 기반 (및 압축) 파일 형식이므로 이러한 종류의 라이브러리를 쉽게 찾을 수 있어야합니다. 그러나 나에게 가장 중요한 것은 당신의 의견과 의견입니다.


편집 : 아이러니하게도, 내 의견으로는 가장 많은 표를 얻은 답변에 따르면 최상의 Excel 가져 오기 및 내보내기 라이브러리는 전혀 내보내기가 아닙니다. 모든 시나리오에 해당되는 것은 아니지만 내 경우에 해당됩니다. XLS 파일은 64k 행만 지원합니다. XLSX는 최대 1M을 지원합니다. 내가 시도한 무료 라이브러리는 성능이 좋지 않습니다 (200k 행이있을 때 1 초를로드하는 데 1 초). 유료 XLSX-> CSV 변환 루틴이 필요할 때 제공하는 가치에 비해 가격이 비싸다고 생각하기 때문에 유료 서비스를 사용해 보지 않았습니다.


18
"Given Excel 2007은 XML 기반 (및 압축) 파일 형식입니다. 이런 종류의 라이브러리는 찾기 쉬워야합니다." "Excel 97은 바이트 기반이므로 이런 종류의 라이브러리를 쉽게 찾을 수 있어야합니다"라고 말하는 것과 같습니다. XML은 단순함을 의미하지 않으며, OOXML은 XML을 불특정하고 이해할 수없이 복잡하게 만드는 방법의 포스터 자식입니다. :-)
Ken

실제로 당신은 그 가정을 전적으로 옳지 않습니다. 최소한 XLSX 용으로 잘 구성된 OOXML 문서를 작성하는 데 사용할 수있는 도구가 있으며 C # .NET으로 수행하기가 매우 쉽습니다.
익명 유형

3
Stack Overflow에서 멀리 떨어진 공식 집과 같은 질문을하기 위해 사이트 제안서를 작성했습니다. 코드 추천 이라고 합니다. 지금 가입하여 질문을함으로써 현실화하십시오!
daviewales

Spire.xls는 어떻습니까? Pro Edition의 경우 800 달러에 불과합니다. 당신은 엑셀 가져 오기 또는 내보내기뿐만 아니라 모든 변환을 얻을 수 있습니다. e-iceblue.com/Introduce/…
DotNet 프로그래머

GemBox.Spreadsheet 는 체크 아웃 할 가치가있는 또 다른 솔루션이며 초고속이며 무료 버전과 프로 버전을 모두 갖추고 있습니다. 또한 프로 버전은 다소 저렴하며 대부분의 경우처럼 배포에 숨겨진 비용이 들지 않습니다.
NixonUposseen

답변:


41

코드를 가장 잘 제어 할 수 있기 때문에 플랫 CSV 파일에 손을 넣을 것입니다. 행을 읽고 한 번에 하나씩 처리하십시오 (문서를 끝까지 읽고 분할하면 모든 메모리가 소모됩니다-쓰기와 동일하게 스트리밍하십시오).

예, 사용자는 처리하기 전에 CSV로 Excel로 저장해야하지만 페이지에 대한 교육과 명확한 지침을 제공하여 이러한 제한을 극복 할 수 있습니까?

마지막으로 고객에게 내보낼 때 MIME 유형을 text / csv로 설정하면 Excel은 일반적으로 해당 유형에 매핑되므로 사용자에게 'Excel 파일'인 것처럼 보입니다.


4
CSV 접근 방식도 시도했지만 몇 가지 문제가 있습니다. 예를 들어, 셀에 여러 줄로 된 텍스트를 넣으려면 어떻게해야합니까? Excel에서 CSV를 가져올 수 없습니다.
Igor Brejc 2009

23
CSV는 그 자리를 차지하지만 포스터는 Excel에 대해 물었습니다. CSV가 아닌 Excel을 원한다고 가정합니다.
John Scipione

7
0345와 같은 열을 내 보내면 CSV가 줄어 듭니다. Excel에서 자동으로이를 345로 자릅니다. 선행 자릿수가 중요 할 때는 전혀 도움이되지 않습니다.
NotMe

2
파일 확장자가 Excel 인 HTML 테이블은 꽤 잘 작동하는 것 같습니다. 여러 원시, 색상 등의 서식을 지정하기 위해 고유 한 Excel 파일을 만들 필요없이 일부 CSS를 고유 한 방식으로 구문 분석합니다
Oskar Duveborn

3
"다른 이름으로 저장"? 아니요. 고객이 Excel을 사용하는 경우 왜 제품과 상호 작용하기 위해 더 제한적인 두 번째 파일을 저장해야합니까?
mlibby

41

원래 답변 이후 Open XML SDK를 발견했습니다 . 스프레드 시트 개체를위한 강력한 형식의 클래스를 제공하며 작업하기가 매우 쉬운 것 같습니다. 내 프로젝트 중 하나의 보고서에 사용할 것입니다. 아아, 버전 2.0은 2009 년 말이나 2010 년 말까지 출시되지 않습니다.


매우 흥미로운! 대량의 데이터를 사용하여 테스트 했습니까?
Jason Kealey

성능 테스트를 수행하지 않았습니다. 주로 차트 및 단일 페이지 보고서를 사용하므로 처리량은 문제가되지 않습니다. 그러나 관리 코드가 가능한 한 빠른 것으로 보입니다.
cdonner

1
@Jason Kealey : 이것은이 포스트에 대한 가장 좋은 답변입니다-수출은 SpreadsheetML과 관련이 없습니다. 파일 내에서 데이터에 모두 액세스 할 수 있습니다. 다른 형식의 데이터가 필요한 경우 XSLT 또는 Linq를 통해 변환을 제공하십시오.
Todd Main

1
그러나 ".xls"파일에는 전혀 작동하지 않습니다.
quillbreaker

github.com/OfficeDev/Open-XML-SDK 이제 오픈 소스이며 github에서 호스팅됩니다 (MS가 최근에 향하는 곳이 좋습니다 )
Alex

34

새 버전의 ExcelPackage는 http://EPPlus.codeplex.com에 있습니다.

내 응용 프로그램에서 일부 데이터를 Excel- 템플릿 2007로 내 보내야하므로 Excel로 내보내기 기능으로 여전히 싸우고 있습니다.

이 프로젝트는 저에게 괜찮은 것처럼 보이며 개발자는 버그와 문제에 매우 민감합니다.


3
잘 작동하지만 GPL에 따라 라이센스가 부여됩니다. 예를 들어이를 사용하는 모든 소프트웨어도 일반 소스 코드로 제공되어야합니다. 항상 좋은 선택은 아닙니다 ...
marc_s

편리한 기본 형식으로 내보내고 프로그램을 작성하십시오. EPPlus를 사용하여 Excel로 변환하면 무료로 사용할 수 있습니다. 기본 프로그램을 기본값으로 사용하지만 다른 "플러그인"을 허용하십시오. 실제 코드에는 GPL이 없습니다.

5
현재 LGPL에 따라 라이센스가 부여 된 것으로 보이므로 카피 레프트 제한없이 링크 된 라이브러리로 사용하는 것이 좋습니다.
Brad R

큰 문자열이 포함 된 Excel 파일을 생성해야하는 경우이 라이브러리는 Excel에서 '읽을 수없는 내용'오류를 임의로 생성하는 경향이 있습니다.
Kevin Laity

1
EPPlus는 메모리 누수를 유발하므로 대량의 데이터에는 적합하지 않습니다.
user3285954

18

ClosedXML을 사용 하고 있으며 훌륭하게 작동합니다!

ClosedXML을 사용하면 개발자가 Excel 2007/2010 파일을보다 쉽게 ​​만들 수 있습니다. XML 문서의 번거 로움을 처리하지 않고도 파일을 조작 할 수있는 멋진 객체 지향 방식을 제공합니다 (VBA와 유사). C # 및 VB (Visual Basic)와 같은 모든 .NET 언어에서 사용할 수 있습니다.


8
나는 그 이름으로 아이러니를 좋아한다 ...
Jagd

또한 같은 경험을 사용했습니다. 잘 작동하고 매우 유연합니다.
AnthonyVO

14

SpreadsheetGear for .NET 은 CSV / XLS / XLSX를 읽고 씁니다.

C # 및 VB 소스 코드가 포함 된 라이브 ASP.NET 샘플은 여기에서 확인 하고 여기 에서 무료 평가판을 다운로드 하십시오 .

물론 SpreadsheetGear는 ASP.NET에서 Excel 통합 문서를 가져 오거나 내보내는 가장 좋은 라이브러리라고 생각합니다. 이 페이지 의 오른쪽에서 일부 고객의 의견을 볼 수 있습니다 .

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


@Joe Erickson : CSV를 읽고 CSV에서 XML을 생성하는 방법에 대해 스프레드 시트 기어를 사용하고 해당 XLS를 사용하여 해당 구조를 포함하는 결과 XML 파일을 생성하는 방법에 대해 알 수 있습니까? 아니면 Spreadsheetgear를 사용하여 CSV에서 직접 XML을 생성 할 수 있습니까?
AnkitSablok


5

나는 과거에 Flexcel 을 사용 했는데 훌륭했습니다. 그러나 이것은 프로그래밍 방식으로 Excel 워크 시트를 만들고 업데이트하기위한 것입니다.


이것이 Excel 2007 (xlsx)을 지원한다는 것을 알 수 없습니다. xls는 64k 행만 지원하므로 제한 사항입니다.
Jason Kealey

@Jason Kealey-Flexcel은 이제 Excel 2007 및 2010을 지원합니다.
Pauk

5

CSV 내보내기는 간단하고 구현하기 쉽고 빠릅니다. 그러나 주목할만한 하나의 잠재적 인 문제가 있습니다. Excel (2007까지)은 CSV 파일에서 선행 0을 유지하지 않습니다. 우편 번호, 제품 ID 및 숫자 값이 포함 된 기타 텍스트 데이터가 깨집니다. Excel에서 값을 올바르게 가져 오는 한 가지 트릭이 있습니다 (정확하게 기억하면 구분 기호와 접두사 값을 = 기호로 사용하십시오 (예 : .., = "02052", ...)). CSV로 사후 처리 작업을 수행 할 사용자가있는 경우 형식을 XLS로 변경하고 파일을 다시 CSV로 저장하지 않아야한다는 점을 알고 있어야합니다. 그렇게하면 선행 0이 손실됩니다.


1
텍스트로 보존해야하는 것은 처음에 '(아포스트로피)'를 넣으십시오
phuclv

또 다른 재미있는 사실 : 독일어와 같은 많은 로케일에서 쉼표로 구분 된 파일을 열 수 없습니다. 국제 접촉과 데이터를 공유하기에 csv를 열악한 형식으로 만드는 것
Christian Sauer

4

몇 년 동안 저는 훌륭한 오픈 소스 Java 프로젝트 인 JExcel 을 사용해 왔습니다 . J #을 사용하여 컴파일하여 .NET 가능 했으며이 화신에서 큰 성공을 거두었습니다. 그러나 최근에 Excel 출력을 만드는 64 비트 IIS 응용 프로그램을 지원하기 위해 코드를 기본 .NET으로 마이그레이션해야했습니다. 32 비트 J # 버전이로드되지 않습니다.

CSharpJExcel의 코드는 LGPL과에서 현재 사용할 수있는 우리가 JExcel 소스 포지 사이트에 배포하기 위해 준비하는 동안, 페이지. VS2005 또는 VS2008로 컴파일됩니다. 원본 JExcel 문서의 예제는 그대로 .NET 버전으로 이동합니다.

그것이 누군가에게 도움이되기를 바랍니다.


두 링크 모두 더 이상 작동하지 않습니다 ...하지만 일부 스 니펫을 발견했으며 .NET 개발자에게는 그리 친숙하지 않은 것처럼 보입니다. 그러나 반대의 다른 라이브러리를 찾았습니다.이 라이브러리는 네이티브 .NET 라이브러리 ( GemBox.Spreadsheet )이며 Java ( GemBox.Spreadsheet for Java ) 로도 포팅되었습니다 .
Hazel Patton


3

다음 사이트에서는 DataTable, DataSet 또는 List <>를 .csv 파일을 내보내고 Excel을 여는 대신 "적절한"Excel 2007 .xlsx 파일로 내보내는 방법을 보여줍니다.

OpenXML 라이브러리를 사용하므로 서버에 Excel을 설치할 필요 가 없습니다 .

마이크 기술 자료-ExportToExcel

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

자신의 응용 프로그램에 쉽게 추가 할 수 있으므로 Excel 파일 이름과 데이터 소스를 전달하여 하나의 함수를 호출하면됩니다.

DataSet ds = CreateSampleData();
string excelFilename = "C:\\Sample.xlsx";
CreateExcelFile.CreateExcelDocument(ds, excelFilename);

도움이 되었기를 바랍니다.


2

ExcelPackage 프로젝트를 확인하면 Excel 2007의 Office Open XML 파일 형식을 사용하며 가볍고 오픈 소스입니다.


1
좋아 보이지만 한 의견은 큰 파일로 나쁘다고 말합니다 (내 시나리오)
Jason Kealey

1
흥미 롭습니다-LGPL이 아니라 GPL 라이센스입니다. 따라서 GPL 응용 프로그램에서 사용해야합니다. (안타깝게도 개발이 중단 된 것 같습니다.)
Jason Kealey

1
ExcelPackage를 시도했지만 포기해야했습니다. 셀에 작은 따옴표 ( ')를 넣으려고하면 실패합니다.
Igor Brejc 2009

2

CSharpJExcel을 사용해 보았지만 적어도 사용 가능한 문서가있을 때까지는 권장하지 않습니다. 개발자의 의견과 달리이 포트는 직접적인 기본 포트 가 아닙니다 .


2

나는 이것이 아주 늦게 알아,하지만 난 대답을 강요 느낌 xPorter (쓰기)와 xlReader 에서 (읽기) xPortTools.Net을 . 우리는 꽤 많은 라이브러리를 테스트했지만 성능에 거의 근접하지 않았습니다 (여기에서 수백만 행을 쓰는 것에 대해 이야기하고 있습니다). 이 제품들에 대해 충분한 좋은 말을 할 수 없습니다!


2

당신이 사용할 수있는 Microsoft.Jet.OLEDB.4.0


1
내 요구 사항 중 하나는 서버에서 Excel을 실행하지 않는 것입니다.
Jason Kealey

2
나는 그것이 달리고 있다고 생각하지 않는다!!
Soner Gönül

2
"Microsoft.Jet.OLEDB.4.0"(xls) "Microsoft.ACE.OLEDB.12.0 for xlsx"에는 MS 오피스가 필요하지 않습니다. 당신은 기회가 서버 @ 제이슨 케일리에서 Excel을 실행하지 할 수 있도록 만 드라이버를 사용해야합니다
산 제이 Goswami

1
XLS (원래 요구 사항이 아님) 및 완전성을 위해 이것을 사용했습니다. 몇 가지 중요한 문제가 있습니다. (1) 32 비트 전용이므로 IIS를 설정해야합니다. (2) 수출이 너무 느리다. (3) 행 및 열 제한이 잘못 문서화되어 있습니다. (4) 레지스트리에 액세스 할 수없는 경우 가져온 열을 "유형 스니핑"하도록 요구하며 일반적으로 잘못됩니다.
philw

1

우리는 비슷한 요구를 확인했습니다. 그리고 사용자 경험을 고려하는 것이 중요하다고 생각합니다.

우리는 거의 같은 측면을 추적했다 :

  1. 스프레드 시트 파일에서 준비 / 작업
  2. 파일을 저장
  3. 파일 가져 오기
  4. 시스템의 데이터 작업

... 워크 플로우

추가 기능 Express를 사용하면 VSTO를 사용하여 번거로운 작업없이 Excel에서 단추를 만들 수 있습니다. 그런 다음 워크 플로는 다음과 같습니다.

  1. 스프레드 시트 파일에서 준비 / 작업
  2. 파일 가져 오기 ( Excel 내 버튼 사용 )
  3. 시스템의 데이터 작업

단추 뒤에있는 코드가 "기본"Excel API (추가 기능을 통해)를 사용하도록하고 수신자 시스템으로 직접 푸시하십시오. 개발자 나 사용자에게는 더 투명해질 수 없습니다. 고려할 가치가 있습니다.


1

Yogesh Jagota의 CodeProject에는 꽤 좋은 기사와 라이브러리가 있습니다.

엑셀 XML 가져 오기-내보내기 라이브러리

SQL 쿼리 및 기타 데이터 소스에서 Excel로 데이터를 내보내는 데 사용했습니다. 제대로 작동합니다.

건배


1
흥미롭지 만 XML 파일이 필요합니다. xls 또는 xlsx 파일을 읽거나 쓸 수 없습니다.
Jason Kealey

1

다음 라이브러리를 사용해 볼 수 있으며 충분히 쉽고 Microsoft의 Open XML SDK에 대한 간단한 래퍼입니다 (2 차 Excel 파일에서 서식, 스타일 및 전체 워크 시트를 재사용 할 수도 있습니다) : http://officehelper.codeplex.com


라이브러리의 새로운 릴리스가 최근에 출판되었습니다.
aron.sinoai

0

Spreadsheetgear는 우리가 발견하고 사용하는 최고의 상업용 라이브러리입니다. 우리 회사는 많은 고급 엑셀 가져 오기 및 내보내기를 수행하며 Spreadsheetgear는 간단한 CSV로 할 수있는 것보다 훨씬 많은 고급 엑셀 기능을 지원하며 빠릅니다. 지원이 우수하기 때문에 무료이거나 저렴하지는 않지만 가치가 있습니다. 문제가 발생하면 개발자가 실제로 응답합니다.


0

아파치 POI 자바 라이브러리는 어떻습니까? Excel에는 사용하지 않았지만 Word 2007에는 사용했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.