Nhập và xuất Excel - Thư viện tốt nhất là gì? [đóng cửa]


180

Trong một trong những ứng dụng ASP.NET của chúng tôi trong C #, chúng tôi có một bộ sưu tập dữ liệu nhất định (bộ sưu tập SubSonic) và xuất nó sang Excel. Chúng tôi cũng muốn nhập tệp Excel theo định dạng cụ thể. Tôi đang tìm một thư viện tôi có thể sử dụng cho mục đích này.

Yêu cầu:

  • Các tệp Excel 2007 (Excel 2003 có hỗ trợ hơn 64 nghìn hàng không? Tôi cần nhiều hơn thế.)
  • Không yêu cầu Excel trên máy chủ
  • Lấy một bộ sưu tập đã gõ và, nếu có thể, sẽ cố gắng đặt các trường số dưới dạng số trong Excel.
  • Hoạt động tốt với các tệp lớn (100k đến 10M) - đủ nhanh.
  • Không gặp sự cố khi xuất GUID!
  • Không tốn một đống tiền (không có thư viện doanh nghiệp như mục đích). Miễn phí luôn luôn là tuyệt vời, nhưng có thể là một thư viện thương mại.

Bạn giới thiệu thư viện nào? Bạn đã sử dụng nó cho số lượng lớn dữ liệu? Có giải pháp nào khác không?

Ngay bây giờ, tôi đang sử dụng một công cụ đơn giản tạo HTML được tải bởi Excel sau này, nhưng tôi đang mất một số khả năng, cộng với Excel phàn nàn khi chúng tôi tải nó. Tôi không cần tạo biểu đồ hoặc bất cứ thứ gì tương tự, chỉ cần xuất dữ liệu thô.

Tôi đang nghĩ về các tệp CSV phẳng, nhưng Excel là một yêu cầu của khách hàng. Tôi có thể làm việc trực tiếp với CSV, nếu tôi có một công cụ để chuyển đổi sang và từ Excel. Cho Excel 2007 là định dạng tệp dựa trên xml (và được nén), tôi đoán loại thư viện này sẽ dễ tìm. Tuy nhiên, điều quan trọng nhất với tôi là ý kiến ​​và ý kiến ​​của bạn.


EDIT: Trớ trêu thay, theo ý kiến ​​của tôi và theo câu trả lời có nhiều phiếu bầu nhất, thư viện xuất nhập khẩu Excel tốt nhất hoàn toàn không xuất. Đây không phải là trường hợp cho tất cả các kịch bản, nhưng nó là cho tôi. Tệp XLS chỉ hỗ trợ 64k hàng. XLSX hỗ trợ lên tới 1M. Các thư viện miễn phí mà tôi đã thử có tính năng hoạt động kém (một giây để tải một hàng khi bạn có 200k hàng). Tôi đã không thử những người được trả tiền, vì tôi cảm thấy họ quá đắt cho giá trị họ cung cấp khi tất cả những gì bạn cần là một thói quen chuyển đổi nhanh chóng XLSX <-> CSV.


18
"Cho Excel 2007 là định dạng tệp dựa trên xml (và được nén), tôi đoán loại thư viện này sẽ dễ tìm thấy" - hah! Điều đó giống như nói "Excel 97 dựa trên byte, vì vậy loại thư viện này rất dễ tìm". XML không ngụ ý sự đơn giản và OOXML là con đẻ cho cách làm cho XML không được xác định rõ ràng và phức tạp không thể giải mã được. :-)
Ken

Trên thực tế bạn không hoàn toàn chính xác trong việc đưa ra giả định đó. Có các công cụ có sẵn giúp xây dựng một tài liệu OOXML được hình thành tốt ít nhất là cho XLSX, rất dễ thực hiện với C # .NET.
Loại ẩn danh

3
Tôi đã tạo một đề xuất trang web để đưa ra các câu hỏi như thế này một ngôi nhà chính thức cách xa Stack Overflow. Nó được gọi là Khuyến nghị về mã Giúp biến nó thành hiện thực bằng cách tham gia và đặt câu hỏi ngay bây giờ!
daviewales

Còn Spire.xls thì sao. Nó chỉ có $ 800 cho phiên bản Pro. Bạn nhận được tất cả các chuyển đổi cũng như nhập hoặc xuất excel của bạn. e-iceblue.com/Int Giới thiệu / Từ
Lập trình viên DotNet

GemBox.S Lansheet là một giải pháp khác đáng để kiểm tra, siêu nhanh và có cả phiên bản miễn phí và pro. Ngoài ra, phiên bản pro khá rẻ và không có bất kỳ chi phí tào lao tiềm ẩn nào để triển khai như hầu hết chúng.
NixonUposeseen

Câu trả lời:


41

Tôi sẽ ném tay vào các tệp csv phẳng, nếu chỉ vì bạn có quyền kiểm soát lớn nhất đối với mã. Chỉ cần đảm bảo rằng bạn đọc theo hàng và xử lý từng hàng một (đọc tài liệu đến hết và chia tách sẽ ăn hết bộ nhớ của bạn - tương tự với việc viết, phát trực tiếp).

Có, người dùng sẽ phải lưu - dưới dạng CSV trong excel trước khi bạn có thể xử lý nó, nhưng có lẽ hạn chế này có thể được khắc phục bằng cách đào tạo và cung cấp hướng dẫn rõ ràng trên trang?

Cuối cùng, khi bạn xuất cho khách hàng, nếu bạn đặt loại mime thành văn bản / csv, Excel thường được ánh xạ sang loại đó để nó xuất hiện cho người dùng là 'tệp Excel'.


4
Tôi cũng đã thử cách tiếp cận CSV, nhưng có một số vấn đề với nó. Ví dụ, nếu bạn muốn có một văn bản nhiều dòng trong một ô thì sao? Tôi không thể thực hiện nhập Excel như vậy.
Igor Brejc

23
CSV có vị trí của nó nhưng người đăng đã hỏi về Excel, tôi cho rằng anh ta phải muốn Excel chứ không phải CSV.
John Scipione

7
CSV rơi xuống khi xuất các cột như 0345. Excel sẽ tự động chuyển số này thành 345. Điều này hoàn toàn không hữu ích khi chữ số hàng đầu đó quan trọng.
NotMe

2
Bảng HTML có phần mở rộng tệp excel dường như hoạt động khá tốt ... nó sẽ phân tích một số CSS theo cách đặc biệt cho các công cụ như định dạng nhiều dòng, màu sắc và vv - mà không thực sự phải tạo tệp Excel gốc
Oskar Duveborn

3
"Lưu thành"? Không. Nếu khách hàng đang sử dụng Excel, vậy tại sao họ phải lưu một tệp thứ hai hạn chế hơn nhiều để tương tác với sản phẩm của bạn?
mlibby

41

Tôi đã phát hiện ra SDK XML mở kể từ câu trả lời ban đầu của tôi. Nó cung cấp các lớp được gõ mạnh cho các đối tượng bảng tính, trong số những thứ khác, và dường như khá dễ dàng để làm việc với. Tôi sẽ sử dụng nó cho các báo cáo trong một trong các dự án của tôi. Than ôi, phiên bản 2.0 không được phép phát hành cho đến cuối năm 2009 hoặc 2010.


Rất thú vị! Bạn đã thử nó bằng cách sử dụng số lượng lớn dữ liệu?
Jason Kealey

Tôi chưa thực hiện bất kỳ bài kiểm tra hiệu suất. Tôi sẽ chủ yếu là biểu đồ và báo cáo một trang, vì vậy thông lượng không phải là vấn đề đối với tôi. Nó dường như là nhanh như mã được quản lý, mặc dù.
cdonner

1
@Jason Kealey: đây thực sự là câu trả lời tốt nhất cho bài đăng này - xuất khẩu trở nên không liên quan với Bảng tính. Tất cả các dữ liệu có thể truy cập từ trong tập tin. Nếu bạn cần dữ liệu ở định dạng khác, hãy cung cấp chuyển đổi qua XSLT hoặc qua Linq.
Todd Main

1
Mặc dù vậy, điều này không hoạt động đối với các tệp ".xls".
quillbreaker

github.com/OfficeDev/Open-XML-SDK nó bây giờ mở và github-lưu trữ (Tôi giống như nơi mà MS được lãnh đạo thời gian gần đây)
Alex

34

phiên bản mới của ExcelPackage có tại đây http://EPPlus.codeplex.com

Tôi vẫn đang chiến đấu với chức năng xuất ra excel vì ứng dụng của tôi sẽ xuất một số dữ liệu sang excel-template 2007

Dự án này có vẻ tốt đối với tôi và nhà phát triển rất nhạy cảm với các lỗi và sự cố.


3
Hoạt động tốt, nhưng nó được cấp phép theo GPL - ví dụ như bất kỳ phần mềm sử dụng nó phải có sẵn trong mã nguồn đơn giản, quá .... không luôn luôn là một lựa chọn tốt ...
marc_s

Xuất ở định dạng gốc thuận tiện cho bạn, viết prog. sử dụng EPPlus để chuyển đổi sang Excel, miễn phí. Làm cho prog chính của bạn sử dụng như mặc định, nhưng cho phép các "plugin" khác, xin chào, mã thực của bạn không có GPL.

5
Có vẻ như điều này hiện đã được cấp phép theo LGPL, vì vậy bạn có thể sử dụng nó như một thư viện được liên kết mà không bị hạn chế copyleft.
Brad R

Lưu ý rằng nếu bạn cần tạo một tệp excel có chuỗi lớn trong đó, thư viện này có xu hướng tạo ngẫu nhiên các lỗi 'nội dung không thể đọc được' trong excel.
Kevin Giáo Dân

1
Coi chừng EPPlus bị rò rỉ bộ nhớ, không thực sự tốt cho lượng lớn dữ liệu.
user3285954 17/05/2015

18

Tôi đã sử dụng CloseXML và nó hoạt động rất tốt!

CloseXML giúp các nhà phát triển tạo các tệp Excel 2007/2010 dễ dàng hơn. Nó cung cấp một cách hướng đối tượng đẹp để thao tác các tệp (tương tự VBA) mà không phải đối phó với sự phức tạp của Tài liệu XML. Nó có thể được sử dụng bởi bất kỳ ngôn ngữ .NET nào như C # và Visual Basic (VB).


8
Tôi yêu sự trớ trêu trong cái tên ...
Jagd

Sử dụng nó là tốt và cùng kinh nghiệm. Hoạt động tốt và rất linh hoạt.
AnthonyVO

14

Bảng tínhGear cho .NET đọc và ghi CSV / XLS / XLSX và hơn thế nữa.

Bạn có thể xem các mẫu ASP.NET trực tiếp với mã nguồn C # và VB tại đây và tải về bản dùng thử miễn phí tại đây .

Tất nhiên tôi nghĩ rằng SpreadsheetGear là thư viện tốt nhất để nhập / xuất sổ làm việc Excel trong ASP.NET - nhưng tôi thiên vị. Bạn có thể thấy những gì một số khách hàng của chúng tôi nói ở phía bên phải của trang này .

Tuyên bố miễn trừ trách nhiệm: Tôi sở hữu Bảng tínhGear LLC


@Joe Erickson: Bạn có thể nói về việc làm thế nào để đọc một CSV và sau đó tạo ra một XML từ CSV chỉ đọc bằng thiết bị Bảng tính và sử dụng XLS tạo ra tệp XML kết quả có chứa cấu trúc đó không? Hoặc chúng ta có thể sử dụng Bảng tính để tạo trực tiếp XML từ CSV không?
AnkitSablok


5

Tôi đã sử dụng Flexcel trong quá khứ và nó thật tuyệt. Nhưng điều này là nhiều hơn cho việc tạo và cập nhật bảng tính excel theo chương trình.


Tôi không thể thấy rằng điều này hỗ trợ Excel 2007 (xlsx). Vì xls chỉ hỗ trợ 64k hàng, đây là một hạn chế đối với tôi.
Jason Kealey

@Jason Kealey - Flexcel hiện hỗ trợ Excel 2007 và 2010
Pauk

5

Xuất CSV đơn giản, dễ thực hiện và nhanh chóng. Có một vấn đề tiềm năng đáng chú ý, mặc dù. Excel (đến năm 2007) không lưu giữ các số 0 đứng đầu trong các tệp CSV. Điều này sẽ cắt xén mã ZIP, id sản phẩm và dữ liệu văn bản khác có chứa các giá trị số. Có một mẹo sẽ khiến Excel nhập các giá trị một cách chính xác (sử dụng các dấu phân cách và giá trị tiền tố với dấu =, nếu tôi nhớ chính xác, ví dụ .., = "02052", ...). Nếu bạn có người dùng sẽ thực hiện các tác vụ xử lý hậu kỳ với CSV, họ cần lưu ý rằng họ cần thay đổi định dạng thành XLS và không lưu tệp trở lại CSV. Nếu họ làm như vậy, số không dẫn đầu sẽ bị mất cho tốt.


1
Đối với bất cứ điều gì nên được bảo tồn dưới dạng văn bản, chỉ cần đặt dấu '(dấu nháy đơn) ở đầu
phuclv

Một sự thật thú vị khác: Tôi không thể mở tệp được phân tách bằng dấu phẩy ở nhiều địa phương, như tiếng Đức. Điều này làm cho csv trở thành định dạng kém để chia sẻ dữ liệu với các liên hệ quốc tế
Christian Sauer

4

Trong nhiều năm, tôi đã sử dụng JExcel cho việc này, một dự án Java nguồn mở tuyệt vời. Nó cũng có khả năng .NET bằng cách sử dụng J # để biên dịch nó và tôi cũng đã thành công lớn với nó trong lần tái sinh này. Tuy nhiên, gần đây tôi cần di chuyển mã sang .NET gốc để hỗ trợ ứng dụng IIS 64 bit trong đó tôi tạo đầu ra Excel. Phiên bản J # 32 bit sẽ không tải.

Mã cho CSharpJExcel là LGPL và có sẵn hiện tại này trang, trong khi chúng tôi chuẩn bị để triển khai nó trên trang web JExcel SourceForge. Nó sẽ biên dịch với VS2005 hoặc VS2008. Các ví dụ trong tài liệu JExcel ban đầu sẽ chuyển khá tốt sang phiên bản .NET.

Hy vọng nó hữu ích cho ai đó ở đây.


Cả hai liên kết không còn hoạt động nữa ... nhưng tôi đã tìm thấy một số đoạn của nó và có vẻ như nó thân thiện với Java hơn, không nhiều cho các nhà phát triển .NET. Tuy nhiên, tôi đã tìm thấy một thư viện khác ngược lại, đó là thư viện .NET nguyên gốc ( GemBox.S Lansheet ), cũng được chuyển sang Java ( GemBox.S Lansheet cho Java ).
Hazel Patton


3

Trang web sau đây trình bày cách xuất một DataTable, Dataset hoặc List <> thành tệp Excel 2007 .xlsx "đúng" (thay vì xuất tệp .csv và nhận Excel để mở tệp).

Nó sử dụng các thư viện OpenXML, vì vậy bạn không cần cài đặt Excel trên máy chủ của mình.

Cơ sở tri thức Mikes - ExportToExcel

Tất cả các mã nguồn được cung cấp, miễn phí , cũng như một ứng dụng demo.

Thật dễ dàng để thêm vào các ứng dụng của riêng bạn, bạn chỉ cần gọi một hàm, chuyển vào tên tệp Excel và nguồn dữ liệu của bạn:

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

Hi vọng điêu nay co ich.


2

Kiểm tra dự án ExcelPackage , nó sử dụng định dạng tệp Office Open XML của Excel 2007, nó nhẹ và nguồn mở ...


1
Nhìn có vẻ tốt nhưng một bình luận nói rằng nó rất tệ với các tệp lớn (kịch bản của tôi)
Jason Kealey

1
Thú vị - nó được cấp phép dưới dạng GPL, không phải LGPL. Do đó, nó phải được sử dụng trong các ứng dụng GPL. (Ngoài ra, thật không may là sự phát triển dường như đã dừng lại.)
Jason Kealey

1
Tôi đã thử ExcelPackage, nhưng phải từ bỏ nó - thất bại khi bạn thử đặt dấu ngoặc đơn (') trong một ô.
Igor Brejc

2

Tôi đã thử CSharpJExcel và sẽ không đề xuất nó, ít nhất là cho đến khi có một số tài liệu có sẵn. Trái với ý kiến ​​của các nhà phát triển, nó không phải là một cổng gốc.


2

Tôi biết điều này khá muộn, nhưng tôi cảm thấy bắt buộc phải trả lời xPorter (viết) và xlReader (đọc) từ xPortTools.Net . Chúng tôi đã thử nghiệm khá nhiều thư viện và không có gì tiến gần đến hiệu suất (tôi đang nói về việc viết hàng triệu hàng trong vài giây ở đây). Không thể nói đủ điều tốt về những sản phẩm này!


2

Bạn có thể dùng Microsoft.Jet.OLEDB.4.0


1
Một trong những yêu cầu của tôi là không có Excel chạy trên máy chủ.
Jason Kealey

2
tôi không nghĩ vậy nên nó đang chạy !!
Soner Gönül

2
MS office không bắt buộc đối với "Microsoft.Jet.OLEDB.4.0" (đối với xls) "Microsoft.ACE.OLEDB.12.0 cho xlsx". bạn chỉ phải sử dụng Trình điều khiển, vì vậy không có cơ hội chạy Excel trên máy chủ @Jason Kealey
Sanjay Goswami

1
Tôi đã sử dụng điều này cho XLS (không phải yêu cầu ban đầu) và để hoàn thiện ... Có một số vấn đề quan trọng: (1) Chỉ có 32 bit, vì vậy bạn sẽ phải đặt IIS để cho phép điều đó. (2) Xuất khẩu chậm khủng khiếp. (3) Nó có giới hạn hàng và cột được ghi chép kém. (4) Nó nhấn mạnh vào "kiểu đánh hơi" các cột được nhập trừ khi bạn có quyền truy cập sổ đăng ký và nó thường bị sai.
philw

1

Chúng tôi vừa xác định một nhu cầu tương tự. Và tôi nghĩ điều quan trọng là phải xem xét trải nghiệm người dùng.

Chúng tôi gần như đã đi cùng nhau:

  1. Chuẩn bị / làm việc trong tập tin bảng tính
  2. Lưu tập tin
  3. Nhập tệp
  4. Làm việc với dữ liệu trong hệ thống

... quy trình làm việc

Add-in Express cho phép bạn tạo một nút trong Excel mà không cần phải chỉnh sửa tẻ nhạt với VSTO. Sau đó, quy trình làm việc trở thành:

  1. Chuẩn bị / làm việc trong tập tin bảng tính
  2. Nhập tệp (sử dụng nút bên trong Excel )
  3. Làm việc với dữ liệu trong hệ thống

Có mã phía sau nút sử dụng API Excel "gốc" (thông qua Bổ trợ nhanh) và đẩy trực tiếp vào hệ thống người nhận. Bạn không thể minh bạch hơn nhiều cho nhà phát triển hoặc người dùng. Đáng để xem xét.


1

Có một bài viết và thư viện khá hay về CodeProject của Yogesh Jagota:

Thư viện xuất nhập khẩu XML XML

Tôi đã sử dụng nó để xuất dữ liệu từ các truy vấn SQL và các nguồn dữ liệu khác sang Excel - hoạt động tốt với tôi.

Chúc mừng


1
Thú vị, nhưng yêu cầu các tệp XML. Không thể đọc / ghi tệp xls hoặc xlsx.
Jason Kealey

1

Bạn có thể thử thư viện sau, nó đủ dễ và nó chỉ là một trình bao bọc nhẹ trên SDK XML mở của Microsoft (thậm chí bạn có thể sử dụng lại định dạng, kiểu và thậm chí toàn bộ trang tính từ tệp Excel thứ cấp): http://officehelper.codeplex.com


Phát hành mới của thư viện đã được xuất bản gần đây.
aron.sinoai

0

Bảng tính là thư viện thương mại tốt nhất mà chúng tôi đã tìm thấy và đang sử dụng. Công ty chúng tôi thực hiện nhiều thao tác nhập và xuất excel tiên tiến và Bảng tính hỗ trợ rất nhiều tính năng excel nâng cao vượt xa mọi thứ bạn có thể làm với CSV đơn giản và nhanh chóng. Nó không miễn phí hoặc rất rẻ mặc dù có giá trị vì sự hỗ trợ là tuyệt vời. Các nhà phát triển sẽ thực sự trả lời bạn nếu bạn gặp phải một vấn đề.


0

Làm thế nào về thư viện java POI apache. Tôi chưa sử dụng nó cho Excel, nhưng đã sử dụng nó cho Word 2007.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.