Revision: 44756
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at April 18, 2011 00:41 by Munawwar
Initial Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;
/*
* Dependency: Office 2007
* OR
* Install 2007 Office System Driver - Data Connectivity Components from http://www.microsoft.com/downloads/en/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en
* No references or anything needed to be added.
*
* Other Notes:
* 1. There is a 64-bit version also. But I am using the 32-bit one.
* 2. For Office 2010. there is a 'Microsoft Access Database Engine 2010 Redistributable' at http://www.microsoft.com/downloads/en/details.aspx?FamilyID=C06B8369-60DD-4B64-A44B-84B371EDE16D
* 3. I am Using OLEDB here. ODBC can also be used.
* 4. Code to read excel from http://www.dreamincode.net/forums/blog/1267/entry-3238-c%23-and-mvc3-uploading-and-parsing-an-excel-document-is-easier-than-it-seems/
* 5. Code to read worskeets from http://www.codeproject.com/KB/aspnet/getsheetnames.aspx
*
* I am doing two tasks here:
* 1. Displaying all worksheet names from the XLSX file
* 2. Echo the data from the file in CSV format
*/
namespace ExcelOleDbTest
{
class ExcelOleDb
{
public static String[] getWorksheetList(String connectionString)
{
OleDbConnection objConn = null;
DataTable sheets = null;
try
{
objConn = new OleDbConnection(connectionString);
objConn.Open(); // Open connection with the database.
// Get the data table containg the schema guid.
sheets = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
// Add the sheet name to the string array.
int k = 0;
String[] worksheets = new String[sheets.Rows.Count];
foreach (DataRow row in sheets.Rows)
{
worksheets[k] = row["TABLE_NAME"].ToString().Replace("'", "").Replace("$", "");
}
return worksheets;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return null;
}
finally
{
// Clean up.
if (objConn != null)
{
objConn.Close();
objConn.Dispose();
}
if (sheets != null)
sheets.Dispose();
}
}
public static void echoAsCSV(string connectionString)
{
try
{
//Fill the dataset with information from the Sheet 1 worksheet.
var adapter1 = new OleDbDataAdapter("SELECT * FROM [Feedback Results$]", connectionString);
var ds = new DataSet();
adapter1.Fill(ds, "results");
DataTable data = ds.Tables["results"];
//Show all columns
for (int i = 0; i < data.Rows.Count - 1; i++)
{
for (int j = 0; j < data.Columns.Count; j++)
Console.Write("\"" + data.Rows[i].ItemArray[j] + "\";");
Console.WriteLine();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static void Main(string[] args)
{
foreach(String arg in args) {
Console.WriteLine(arg);
}
//Create a connection string to access the Excel file using the ACE provider.
//This is for Excel 2007. 2003 uses an older driver.
//Change the location of the xlsx file
var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 12.0;", "../../myxlsx/sample.xlsx");
//Echo worskeet list
String[] worksheetList = getWorksheetList(connectionString);
if (worksheetList != null)
foreach (String worksheetName in worksheetList)
Console.WriteLine(worksheetName);
echoAsCSV(connectionString);
Console.Read();
}
}
}
Initial URL
Initial Description
Initial Title
C# .NET - Read Excel 2007 with OLE DB and convert data to CSV format
Initial Tags
excel
Initial Language
C#