Blue Theme Orange Theme Green Theme Red Theme
 
Nevron Chart
Home | Forums | Videos | Advertise | Certifications | Downloads | Blogs | Interviews | Jobs | Beginners | Training
 | Consulting  
Submit an Article Submit a Blog 
 Jump to
Skip Navigation Links
TechnologyExpand Technology
WebsiteExpand Website
DevExpress UI Controls
Search :       Advanced Search »
Home » Windows Forms C# » How To Open and Read an Excel Spreadsheet into a ListView in .NET

How To Open and Read an Excel Spreadsheet into a ListView in .NET

The Interoperability services make it very easy to work with COM Capable Applications such as Word and Excel.

Author Rank :
Page Views : 434633
Downloads : 6793
Rating :
 Rate it
Level : Intermediate
   Print Read/Post comments Post a comment  Similar Articles  
   Email to a friend  Bookmark  Author's other articles  
Download Files:
ExcelReadMG.zip
 
 
Discover the top 5 tips for understanding .NET Interop
Become a Sponsor
Discover the top 5 tips for understanding .NET Interop
Become a Sponsor
 Tag Cloud
 Latest Jobs
More ... 
 Latest Interview Questions
More ... 



The Interoperability services make it very easy to work with COM Capable Applications such as Word and Excel.  You can also refer to my previous article on the topic: Real-time Stock Quotes in Excel using .NET for more information on accessing Excel via .NET.  This article was written in response to a question asking How do I open and excel file and read it using .NET?

ExcelRead.jpg 

Figure 1 - Excel Spreadsheet read into a ListView

The first step is to create a reference in your project to Excel 9.0 Objects Library.  This is done by right mouse clicking on the References folder in the Solution Explorer and choosing Add Reference. This brings up the Tab Dialog below. Choose the COM Tab and pick Microsoft Excel 9.0 Objects Library.

AddRefMG002.jpg 

Figure 2 - Adding an Excel Reference

This action puts an Interop.Excel.dll and Interop.Office.dll into your bin directory so you can manipulate excel.

Now we can declare our Excel Application Object and the compiler will recognize it:

private Excel.Application ExcelObj = null;

Excel is launched and an Application reference is obtained in the constructor of our form.  First an Excel Application object is constructed.  Then we check to make sure Excel was actually started. If it was, we have a valid application object and we can now use it to open a file:

public Form1()
{
// Initialize the Windows Components
InitializeComponent();
ExcelObj =
new Excel.Application();
// See if the Excel Application Object was successfully constructed
if (ExcelObj == null)
{
MessageBox.Show("ERROR: EXCEL couldn't be started!");
System.Windows.Forms.Application.Exit();
}
// Make the Application Visible
ExcelObj.Visible = true;
}

The code for opening the Excel file is shown below. The code uses the OpenFileDialog component to get the path name for the Excel file.  The Excel file is opened using the WorkBooks collections' Open method.  This method takes 15 parameters with the following definition.

Function Open(Filename As String, [UpdateLinks], [ReadOnly], [Format], [Password], [WriteResPassword], [IgnoreReadOnlyRecommended], [Origin], [Delimiter], [Editable], [Notify], [Converter], [AddToMenuRecentlyUsed]) As Workbook

We really are only interested in the FileName, but have added the other default parameters for your reference.  There is also an OpenText method in Workbooks for opening tab or comma delimited text files.

private void menuItem2_Click(object sender, System.EventArgs e)
{
// prepare open file dialog to only search for excel files (had trouble setting this in design view)
this.openFileDialog1.FileName = "*.xls";if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
{
// Here is the call to Open a Workbook in Excel
// It uses most of the default values (except for the read-only which we set to true)
Excel.Workbook theWorkbook = ExcelObj.Workbooks.Open( openFileDialog1.FileName, 0, true, 5,
"", "",
true, Excel.XlPlatform.xlWindows, "\t", false, false,0, true);
// get the collection of sheets in the workbook
Excel.Sheets sheets = theWorkbook.Worksheets;
// get the first and only worksheet from the collection of worksheets
Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);
// loop through 10 rows of the spreadsheet and place each row in the list view
for (int i = 1; i <= 10; i++)
{
Excel.Range range = worksheet.get_Range("A"+i.ToString(), "J" + i.ToString());
System.Array myvalues = (System.Array)range.Cells.Value;
string[] strArray = ConvertToStringArray(myvalues);
listView1.Items.Add(
new ListViewItem(strArray));
}
}
}

You also may want to note the ConvertToStringArray method which is used to convert a System.Array into a string array.  If someone knows an easier way to do this, please let me know and I'll alter the article.  The problem is that an Excel Array comes back as two dimensional even if you are selecting a range of a single row, so you need to change the 2-d array into something the listview can accept. Also the listview array is 0 based and the Excel range array is 1 based.

string
[] ConvertToStringArray(System.Array values)
{
// create a new string array
string[] theArray = new string[values.Length];
// loop through the 2-D System.Array and populate the 1-D String Array
for (int i = 1; i <= values.Length; i++)
{
if (values.GetValue(1, i) == null)
theArray[i-1] = "";
else
theArray[i-1] = (string)values.GetValue(1, i).ToString();
}
return theArray;
}

That's all there is to it!  Now you can read in all your old Excel Databases. Perhaps you can even use ADO.NET to place them into a database! (Could be the topic for the next article).

VBA Resources for Excel:  Excel VBA Made Easy

Affiliation Links:  Learn MS Office the Easy Way  Passing Microsoft Certification  Basic Programming 

Comment Request!
Thank you for reading this post. Please post your feedback, question, or comments about this post Here.
Login to add your contents and source code to this article
 Article Extensions
Contents added by Sunita Tajanpure on Dec 20, 2010
Hi,
    
   I am able to convert word and excel files to .mht format.,Using the same Word And Excel Application Object....
   It`s working fine on my local server but as i deploy it to the client server it`s giving me the error

"retrieving the COM class factory for component with CLSID {0002E55D-0000-0000-C000-000000000046} failed due to the following error: 80040154"

I have followed all the posibilities I could but nothing worked for me
ref url I followed : http://blog.crowe.co.nz/archive/2006/03/02/589.aspx
please help,

 [Top] Rate this article
 
 About the author
 
Mike Gold

Michael Gold is President of Microgold Software Inc., makers of the WithClass UML Tool. His company is a Microsoft VBA Partner and Borland Partner. Mike is a Microsoft MVP and founding member of C# Corner. He has a BSEE and MEng EE from Cornell University and has consulted for Chase Manhattan Bank, JP Morgan, Merrill Lynch, and Charles Schwab. Currently he is a senior developer at Finisar Corp. He has been involved in several .NET book projects, and is currently working on a book for using .NET with embedded systems.

He can be reached at mike@c-sharpcorner.com

Looking for C# Consulting?
C# Consulting is founded in 2002 by the founders of C# Corner. Unlike a traditional consulting company, our consultants are well-known experts in .NET and many of them are MVPs, authors, and trainers. We specialize in Microsoft .NET development and utilize Agile Development and Extreme Programming practices to provide fast pace quick turnaround results. Our software development model is a mix of Agile Development, traditional SDLC, and Waterfall models.
Click here to learn more about C# Consulting.
 
Introducing MaxV - one click. infinite control. Hyper-V Hosting from MaximumASP.
Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
Dynamic PDF
ceTE software specializes in components for dynamic PDF generation and manipulation. The DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and new content to existing PDF documents from within your applications.
Discover the Top 5 .NET Memory Management Fundamentals
To write the best .NET code, you need to know exactly how the .NET framework really manages memory. Ricky Leeks presents the Top 5 fundamental facts of .NET memory management. Learn more.
Nevron Chart for .NET 2010.1 Now Available
The leading .NET charting control now features PDF, Flash and Silverlight export, visualization of large datasets and more. Deliver true charting functionality to your BI, Scorecard, Presentation or Scientific apps. Download evaluation now.
ASP.NET 4 Hosting
Get 2 Months Free of ASP.NET Hosting for Only $4.95/month! Receive FREE MS SQL and MySQL Databases Including ASP.NET 4/3.5, MVC 3.0, Silverlight 4, Windows 2008/IIS 7.0 Plus FREE IIS 7 Modules. Host UNLIMITED ASP.NET Web Sites – Click Here!
 
 Post a Feedback, Comment, or Question about this article
Subject:
Comment:
DevExpress Free UI Controls
Become a Sponsor
 Comments
How to delete a row from an Excel sheet using C#.net by Prabhu On August 4, 2006
How to delete first Row from an Excel sheet using C#.net. For my project its very important. I am New for DotNet. So i don't know what to do. Please Help. Please mail me: prabhubn@officetiger.com
Reply | Email | Modify 
Question : getting exception in opened excel file by vivek On January 30, 2007
hi, i opened excel file in my c# application in readonly mode with open(.......) method and visible = false; and after that if open same excel file seperately in window my application throws exception
Reply | Email | Modify 
Import Excel Data into SQL server2000 Database by Amita On February 27, 2007
This artical is very helpful to me to develope an web- application .net which is related to upload a excel file but now i want to store it's contents in SQL server2000 database which create tables dynamically , thanks for ur help
Reply | Email | Modify 
Re: Import Excel Data into SQL server2000 Database by SangDV On October 3, 2007
#region Hàm Insert vào CSDL (chua thành công) private void button4_Click(object sender, EventArgs e) { { if (dt != null) // dt là 1 DataTable dùng d? hi?n th? ra DataGrid { int numrows = dt.Rows.Count; // s? dòng trong DataTable for (int i = 0; i < numrows; i++) { try { #region Ð?y d? li?u vào Paramater SqlParameter[] prm = new SqlParameter[5]; prm[0] = new SqlParameter("@Num1", SqlDbType.NVarChar); prm[0].Value = dt.Rows[i][0].ToString(); prm[1] = new SqlParameter("@Num2", SqlDbType.NVarChar); prm[1].Value = dt.Rows[i][1].ToString(); prm[2] = new SqlParameter("@Num3", SqlDbType.NVarChar); prm[2].Value = dt.Rows[i][2].ToString(); prm[3] = new SqlParameter("@Num4", SqlDbType.NVarChar); prm[3].Value = dt.Rows[i][3].ToString(); prm[4] = new SqlParameter("@Num5", SqlDbType.NVarChar); prm[4].Value = dt.Rows[i][4].ToString(); string strSql = "SP_Test"; DataSet ds = Util.GetDataSet(strSql, prm); #endregion } catch { MessageBox.Show("Không thành công!"); } } } MessageBox.Show("Thành công!"); } } #endregion
Reply | Email | Modify 
Re: Re: Import Excel Data into SQL server2000 Database by ravi On August 27, 2008

Hi i want to read data from excel file ,using C#.net 2005 and storing it in sql server 2005.

i cant use sqlbulkcopy as my excel file is not formatted.

i have to read cell by cell..

and store it in database.

please do provide some code

Thanks

Sakee

Reply | Email | Modify 
Re: Re: Import Excel Data into SQL server2000 Database by ravi On August 27, 2008

Hi ,i want to read excel file from c# and then store it into sql server 2005.

i cant use bulkcopy as excel file is not formated.

i have to read cell by cell .

please gice some code and and i am new to c#..

Thanks

Sakeee

Reply | Email | Modify 
Interop.Office.dll not found in bin directory by Jacobs On April 19, 2007
The Interop.Office.dll is not stored in my bin directory. And my code to generate an Excel is also not working. What did i forgot to do/install? Can anaybody help me please?? Thx!
Reply | Email | Modify 
Re: Interop.Office.dll not found in bin directory by Mahesh On April 19, 2007
Do you have office installed on your machine? Have you added reference to Excel 9.0 Lib?
Reply | Email | Modify 
Re: Re: Interop.Office.dll not found in bin directory by Filip On March 19, 2008
That is the problem - you have to have installed office.Using Excel Automation has many disadvantages, so I think it is better not to use it. Just look why is our .NET component better than Excel Automation. We have a free version of this C#/VB.NET component that you can use in your application (even in commercial ones).
Reply | Email | Modify 
Excel.Application is not detected .. by manu On May 22, 2007
Excel.Application is not detected . i am getting error Error 1 The type or namespace name 'Excel' could not be found . i have installed excel 2003 , i have selected MS excel 11.0 in the COM tab
Reply | Email | Modify 
Re: Excel.Application is not detected .. by arghad On May 22, 2007
Ok .. here is a working version from the code:
using ExcelInterop = Microsoft.Office.Interop.Excel;

ExcelInterop.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
ExcelInterop.WorkbookClass workBook = (ExcelInterop.WorkbookClass)excel.Workbooks.Open(Path, 0, true, 5, "", "", true, ExcelInterop.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
ExcelInterop.Sheets sheets = workBook.Worksheets;
ExcelInterop.Worksheet worksheet = (ExcelInterop.Worksheet)sheets.get_Item(1);
ExcelInterop.Range range = worksheet.get_Range("A1", "A300");
System.Array myvalues = (System.Array)range.Cells.Value2;
string[] strArray = ConvertToStringArray(myvalues);
for (int i = 1; i < strArray.Length; i++)
{
Console.WriteLine(strArray[i]);
}

and of course the method:
string[] ConvertToStringArray(System.Array values)
{
// create a new string array
string[] theArray = new string[values.Length];
// loop through the 2-D System.Array and populate the 1-D String Array
for (int i = 1; i <= values.Length; i++)
{
if (values.GetValue(i, 1) == null) continue;
theArray[i-1] = (string)values.GetValue(i, 1).ToString();
}
return theArray;
}
Hope this help ;-)
Arghad
Reply | Email | Modify 
It's reading the First Column only......What i do further to read N number of Column by Victor On June 16, 2007

 

Hai...

         Its working Fine.But it should read the First column values only.if I change A1 object and A300 object to 'C' or 'D' it reads the 3 0r 4 th column respectivily.Why it is so...Pls give the soln to read the Excel file full column.

Thnx.

Victor

 

 

Reply | Email | Modify 
Re: Excel.Application is not detected .. by Danny Garduce On October 10, 2007

Try to include this on the top of your code

using Microsoft.Office;

Reply | Email | Modify 
Form is not opening from customised menu bar of excel. by Indrasis On May 31, 2007

I am trying to open a form from a customised menu bar I have created by C#.net. The form is opning but stops responding and the controls over it are not visible.

private void MenuItem_Click(Office.CommandBarButton Ctrl, ref Boolean cancelDeafult )

{

try {

Form2 frm2 = new Form2();

frm2.Show(); }

catch (Exception e)

{

MessageBox.Show(e.Message, e.Source);

}

Searching for solution.

Reply | Email | Modify 
How to extract comments? by Florian On July 18, 2007

Hi, good article.

But i'd need to get the comments to the extracted cells, too. Any ideas how to include this in this example?

I found other articles about deleting & adding comments, but how to get the comment text into my C# programme? Thanks in advance!

[edit] Comment.Shape.AlternativeText returns a string with the comment text.

Reply | Email | Modify 
Getting Error by MIni On August 10, 2007

WhenI use this code I am getting an error from my remote client server. IN local server creates no peroblem. then errror I am getting is

"Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005. "

 

Can you please help me to solve this problem? My email Id is deekshitha@hotmail.com

Reply | Email | Modify 
its useful u cannot get error by karthic On February 15, 2008
http://support.microsoft.com/kb/306023 .if u have doubt i am online at itsmekarthic@hotmail.com
Reply | Email | Modify 
How to create Worksheet in EXcel from .Net by Raja On August 18, 2007
I want to create one more worksheet in Excel from .Net... CAn Anyone help me how to do that?
Reply | Email | Modify 
Re: How to create Worksheet in EXcel from .Net by jack On August 29, 2007

Hi,
  I found an excel component - Spire.XLS, may useful to you.
  Create sheets, read/write charts, Data Validation, comments,
  rich text, etc.
  check link: http://www.e-iceblue.com , free to download.

 

 

Reply | Email | Modify 
How can i transfer data from listview to exel by Kamrul On September 17, 2007
suppose that i have list view. I want to get the datas in an exel file. how can i do.
Reply | Email | Modify 
SAve as problem by Mukesh On December 19, 2007
Hello sir, This is mukesh here. i tried ur example.its working fine.Thanks,but i have a question in this,if i use the same file name in Save as, it shows a dialog "File already exist...overwrite". I need not to show such dialog box when SaveAs metod of workbook invoked.it should overwrite the file. plz help me and reply on mukesh.wadhwa@honeywell.com Thanks & Regards Mukesh
Reply | Email | Modify 
complete solution by karthic On February 15, 2008
// Needs for the Excel Microsoft.Office.Interop.Excel.Application m_objExcel = null; Microsoft.Office.Interop.Excel.Workbooks m_objBooks = null; Microsoft.Office.Interop.Excel._Workbook m_objBook = null; Microsoft.Office.Interop.Excel.Sheets m_objSheets = null; Microsoft.Office.Interop.Excel._Worksheet m_objSheet = null; Microsoft.Office.Interop.Excel.Range m_objRange = null; object m_objOpt = System.Reflection.Missing.Value; Microsoft.Office.Interop.Excel.Application ExcelObj = new Microsoft.Office.Interop.Excel.Application(); ExcelObj.Visible = false; // Start a new workbook in Excel. m_objExcel = new Microsoft.Office.Interop.Excel.Application(); m_objBooks = (Microsoft.Office.Interop.Excel.Workbooks)m_objExcel.Workbooks; m_objBook = (Microsoft.Office.Interop.Excel._Workbook)(m_objBooks.Add(m_objOpt)); /// Add data to cells of the first worksheet in the new workbook. m_objSheets = (Microsoft.Office.Interop.Excel.Sheets)m_objBook.Worksheets; m_objSheet = (Microsoft.Office.Interop.Excel._Worksheet)(m_objSheets.get_Item(1)); object[] objHeaders = { "ID", "KEY", "DESCRIPTION" }; m_objRange = m_objSheet.get_Range("A1", "C1"); m_objRange.set_Value(m_objOpt, objHeaders); m_objFont = m_objRange.Font; m_objFont.Bold = true; int size = msgObjs.Count; object[,] objData = new Object[size + 2, 3]; int loopcount = 0; //here write the data coding as u like foreach (MsgDes mobj in msgObjs) { objData[loopcount, 0] = mobj.Id; if (mobj.Key != null) objData[loopcount, 1] = mobj.Key; if (mobj.Description != null) objData[loopcount, 2] = mobj.Description; loopcount = loopcount + 1; } m_objRange = m_objSheet.get_Range("A2", Missing.Value); m_objRange = m_objRange.get_Resize(size + 2, 3); m_objRange.set_Value(m_objOpt, objData); // Save the workbook and quit Excel. string path = //get path from the user //if file exists delete the file m_objBook.SaveAs(path + "test.xls", m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt); m_objBook.Close(false, m_objOpt, m_objOpt); m_objExcel.Quit(); ExcelObj.Quit(); isSuccess = true;
Reply | Email | Modify 
Merging Cells by Mukesh On December 27, 2007
Hi, Can any body help me for writing the code for merging cells. Thanks Mukesh
Reply | Email | Modify 
listview only shows one row - vertically by Filo On March 2, 2008
How would I make the listView to not only show the first column but the whole document's data. It currently shows only the first column and it lists the data vertically. I want the listview to show the data exactly the same way you did it in this example.
Reply | Email | Modify 
listview only shows one row - vertically by Filo On March 2, 2008
How would I make the listView to not only show the first column but the whole document's data. It currently shows only the first column and it lists the data vertically. I want the listview to show the data exactly the same way you did it in this example.
Reply | Email | Modify 
How do I insert data by Scott On March 5, 2008
This is wonderful, but, I need to insert data into cells. How is this done?
Reply | Email | Modify 
How can i open the exel file in edit mode. by Hemant On March 6, 2008
i opend the exel file by following code. Dim xlTmp As Excel.Application xlTmp = New Excel.Application Dim wb As Excel.Workbook wb = xlTmp.Workbooks.Open("C:\UnitTest files for import\MapTest.xls") xlTmp.Visible = True 'xlTmp.ActiveWorkbook.ReadOnly wb.Activate() But it not let me save the file by same name
Reply | Email | Modify 
plz write the code for transfer the data of one excel sheet into the another excel sheet. plz write the runnable code and way to run the code. by harsh On March 8, 2008
plz write the code for transfer the data of one excel sheet into the another excel sheet. plz write the runnable code and way to run the code.
Reply | Email | Modify 
display the data in the datagrid in a new spreadsheet by Filo On March 18, 2008
Hi, Nice article, very helpful. Now: How can I take the data in the datagrid and display it in a new spreadsheet. Please help!
Reply | Email | Modify 
reading a excel file from C#.net 2005 and storing it in sql server 2005 by ravi On August 27, 2008
hi, i have read from excel cell by cell as the excell file is not formatted . then i want to insert the values into sql server2005. please do f\provide some code i am struck with it.. Thanks SAKEE
Reply | Email | Modify 
reading a excel file from C#.net 2005 and storing it in sql server 2005 by ravi On August 27, 2008
hi, i have read from excel cell by cell as the excell file is not formatted . then i want to insert the values into sql server2005. please do f\provide some code i am struck with it.. Thanks SAKEE
Reply | Email | Modify 
Server Requirements??? by Seed On September 15, 2008
Doesn't this solution require that MS Office be installed on the server? thx, seed
Reply | Email | Modify 
Re: Server Requirements??? by David On October 22, 2008
If I wanted to run the app on a server does the server have to have excel or office installed?
Reply | Email | Modify 
Where do I put the xls file? by steven On November 15, 2008

I am trying to use the code above to read a xls file. I had to modify the code a bit to get it to work on my computer, like putting Microsoft.Office.Interop before every Excell reference. I also had to use Microsoft.Excell.12 as the reference instead of 9. I dont know if that makes any kind of difference.

My problem is that for some reason, the file is not being recognized. I did not use the OpenFileDialog class, as I know the single file I want to open, so instead I just put the file name I wanted to open as the 1st parameter in the OPEN function. Those are the only major differences between what I have and what was posted above.

What comes up is a prompt asking me to check the spelling of the file and then asking if I want to quit or continue, quit being closing the program out, and continue being continue on from where I was. The data never shows up or it never finds the file for some reason. I made sure that the file was named correctly and even tried placing it in different places on my computer. I am not dealing with a database at all, just need to read a single excell file. Can someone please help. Thanks.

Reply | Email | Modify 
how to get the data in an execl on to listview? by Anitha On January 20, 2009
I tried your code .I'm getting an exception :"Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80040154. " Can i do this without installing excel on my system?..Is there any way of doing this without installing excel ??
Reply | Email | Modify 
Editing the Excel file in asp .net application and saving it back by sachu On May 25, 2009
Can anyone here please suggest how to implement the same using asp .net application?

Thanks in advance....
Reply | Email | Modify 
Feedback by tee On February 1, 2010
Thanks Mike
Reply | Email | Modify 
for vb.net by reena On June 4, 2010
how could we do the same thing in vb.net
Reply | Email | Modify 
how to upload and read the excel file in c#.net by srilekha On January 31, 2011
hi all, I want to upload a excel file and i want to read the excel file details using c#.net can any one say me that i how should i write the code for this.
Reply | Email | Modify 
Re: how to upload and read the excel file in c#.net by knights On January 31, 2011
I think this is not the right place to put your question!
Reply | Email | Modify 
6 Months Free & No Setup Fees ASP.NET Hosting!
 © 2012  contents copyright of their authors. Rest everything copyright Mindcracker. All rights reserved.