Click here to Skip to main content
Licence LGPL3
First Posted 1 Nov 2006
Views 366,009
Downloads 7,458
Bookmarked 291 times

Excel Reader

By Liu Junfeng | 20 Feb 2009
Create, read and modify Excel *.xls files in pure C# without COM interop
2 votes, 2.4%
1
2 votes, 2.4%
2
2 votes, 2.4%
3
5 votes, 5.9%
4
74 votes, 87.1%
5
4.96/5 - 86 votes
6 removed
μ 4.64, σa 1.45 [?]
Sample Image - ExcelReader.png

Introduction

This library is built based on the following documents, thanks to their authors:

Record structures in BIFF8/BIFF8X format are considered.

Now this project is hosted on Google Code.
You can get the latest code, report issues and submit improvements from there. 

What It Can Do?

  • It can read worksheets in a workbook and read cells in a worksheet.
  • It can read cell content (text, number, datetime, or error) and cell format (font, alignment, linestyle, background, etc.).
  • It can read pictures in the file, get information of image size, position, data, and format.
  • It can create a workbook and save to file.

Using the Code

  1. Open file:
    Stream fileStream = File.OpenRead(file);
    Workbook book = new Workbook();
    book.Open(fileStream);
    Worksheet sheet = book.Worksheets[0];
  2. Read cell:
    int row = 1;
    int col = 0;
    string ID = sheet.Cells[row, col].StringValue;
    
    Picture pic = sheet.ExtractPicture(row, col);
  3. Create workbook:
    string file = "C:\\newdoc.xls";
    Workbook workbook = new Workbook();
    Worksheet worksheet = new Worksheet("First Sheet");
    worksheet.Cells[0, 1] = new Cell(1);
    worksheet.Cells[2, 0] = new Cell(2.8);
    worksheet.Cells[3, 3] = new Cell((decimal)3.45);
    worksheet.Cells[2, 2] = new Cell("Text string");
    worksheet.Cells[2, 4] = new Cell("Second string");
    worksheet.Cells[4, 0] = new Cell(32764.5, "#,###.00");
    worksheet.Cells[5, 1] = new Cell(DateTime.Now, @"YYYY\-MM\-DD");
    worksheet.Cells.ColumnWidth[0, 1] = 3000;
    workbook.Worksheets.Add(worksheet);
    workbook.Save(file);
  4. Traverse worksheet:
     // traverse cells
     foreach (Pair<Pair<int, int>, Cell> cell in sheet.Cells)
     {
         dgvCells[cell.Left.Right, cell.Left.Left].Value = cell.Right.Value;
     }
    
     // traverse rows by Index
     for (int rowIndex = sheet.Cells.FirstRowIndex; 
    	rowIndex <= sheet.Cells.LastRowIndex; rowIndex++)
     {
         Row row = sheet.Cells.GetRow(rowIndex);
         for (int colIndex = row.FirstColIndex; 
    	colIndex <= row.LastColIndex; colIndex++)
         {
             Cell cell = row.GetCell(colIndex);
         }
     }

History

  • 2007-5-17
    • Displayed each Sheet in separate tabpage
    • Fixed some bugs in FORMULA.cs and Form1.cs
  • 2007-5-26
    • Decoded FORMULAR result
  • 2008-1-23
    • Changed default Encoding from ASCII to UTF8 in Record.cs ln97 (suggested by ragundo)
    • Return EmptyCell instead of null for non existing cells (requested by amrlafi)
    • Bug fix in Record.cs ln83 and ln133 (proposed by dhirshjr and ilogpasig)
    • Tried to fix bug in CompoundDocument.cs (found by stevenbright)
  • 2008-9-15
    • Create, Open and Modify CompoundDocument
  • 2008-9-22
    • Save modified CompoundDocument
  • 2008-10-26
    • Encoded workbook and worksheet to BIFF8 records
    • Fixed a bug that compressed Unicode string wrongly decoded by UTF8
  • 2008-11-10
    • Fixed XF format so that the created *.xls file can be opened by Microsoft Excel 2003
  • 2008-11-16
    • Assigned number format for number and date time values
    • Set column widths
  • 2009-1-3
    • Updated project source code and article text
    • Many bug fixes
    • Added support to create and modify *.xls files
  • 2009-01-20
    • Fix for getting 'NaN' when reading string value of a formula cell
    • Start a Google Code project
  • 2009-01-23
    • Support for decode cell format and encode predefined cell format
    • Changed namespaces and directory structure
    • Added some test cases
  • 2009-02-12
    • Initial implementation of encode images

License

This article, along with any associated source code and files, is licensed under The GNU Lesser General Public License (LGPLv3)

About the Author

Liu Junfeng

Software Developer

China China

Member


Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
QuestionImages count [modified] Pinmemberafxii3:37 15 Jan '12  
QuestionCol count? PinmemberOkan Kocyigit3:11 22 Dec '11  
QuestionCharting/graphs Pinmemberforge33_se16:11 31 Aug '11  
QuestionMerge cells PinmemberplextoR1:44 24 Jul '11  
GeneralIs this Possible to read and write xlsx PinmemberM I developer4:29 6 Jun '11  
GeneralMy vote of 3 PinmemberReelix1:55 13 Apr '11  
GeneralUseful PinmemberLina9922:45 31 Mar '11  
GeneralMy vote of 5 Pinmemberrajesh_chan23:36 28 Mar '11  
GeneralClass reference Pinmembersenguptaamlan2:53 8 Mar '11  
AnswerRe: Class reference PinmemberDrkSpyder21:50 26 Dec '11  
GeneralMy vote of 5 Pinmembercareced8:36 1 Mar '11  
GeneralMy vote of 5 Pinmembersneff3:51 28 Feb '11  
GeneralCompoundDocument should implement IDisopsable Pinmembersneff3:30 28 Feb '11  
GeneralRe: CompoundDocument should implement IDisopsable PinmemberLiu Junfeng7:07 31 Mar '11  
GeneralRe: CompoundDocument should implement IDisopsable Pinmembersneff11:20 31 Mar '11  
GeneralMy vote of 5 Pinmemberahsan sarfraz2:07 3 Feb '11  
GeneralMy vote of 5 PinmemberMember 12187710:00 22 Dec '10  
QuestionCan I read just an specific worksheet? Pinmemberjavierv7:50 2 Dec '10  
GeneralMy vote of 1 PinmemberNilesh Kabra20:03 17 Nov '10  
QuestionHow To Get ForeColor of a Cell? PinmemberMajid_grok3:32 7 Aug '10  
GeneralBest tool for reading and writing excel using c# Pinmemberharry peter865:43 25 Jul '10  
GeneralMy vote of 5 Pinmemberlionzl17:20 6 Jul '10  
GeneralWrite a file to a byte array instead of a physical file Pinmembersilvaan0:16 18 May '10  
General2010 Excel Issue while opening Pinmemberrleoanrd14:37 27 Apr '10  
GeneralRe: 2010 Excel Issue while opening Pinmembersanme9818:39 25 Jul '10  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web04 | 2.5.120209.1 | Last Updated 20 Feb 2009
Article Copyright 2006 by Liu Junfeng
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid