Click here to Skip to main content
15,903,012 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi Friends,
I am generating an Excel file (Excel 2003 i.e. ".xls") using some data tables.
File generates successfully.
Now I am trying to open the same file using upload control and OLEDB connection, but I am getting this strange error.
"External table is not in the expected format."
Now, if I open the file and try to run my code, it works fine....
whereas it is expected that it should give me an error saying "File is already being used." (Please correct me here if I am wrong.)

I googled a lot about this but got no solution. All I got is,
use Provider=Microsoft.ACE.OLEDB.12.0;Data Source=";
instead of "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";

I use these two providers depending upon type of the file (i.e .xls / .xlsx)

I ahve (Do spell check before you post.) MS Office 2007 installed on my machine.

Can you please help me friends??

Thanks,
Lok..


Please refer this code..

C#
public enum ExcelVersion
{
	Excel,
        Excel2007
};
private string ProviderExcel = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
private string ExtendedPropertiesExcel = "Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
private string ProviderExcel2007 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=";
private string ExtendedPropertiesExcel2007 = "Extended Properties=\"Excel 12.0;HDR=YES\"";
private string mConnString = "";
protected void btnPost_Click(object sender, EventArgs e)
{
	if (rdpUpload.UploadedFiles.Count == 0)
        	throw new Exception("Please select file to upload");
	
	string sExtension = "";
        string FileName = "";
        ApplicationDirectoryTypeInfoList oApplicationDirectoryTypeInfoList = ApplicationDirectoryTypeInfoList.GetAllApplicationDirectories();  // my classes to read Directory..
        ApplicationDirectoryTypeInfo oApplicationDirectoryTypeInfo = oApplicationDirectoryTypeInfoList.GetItem(35);
        string FilePath = oApplicationDirectoryTypeInfo.ApplicationDirectoryFQN;
        FilePath = FilePath.Substring(FilePath.IndexOf("/") + 1);
        FilePath = AppDomain.CurrentDomain.BaseDirectory + FilePath;
        foreach (UploadedFile file in rdpUpload.UploadedFiles)
        {
		FileName = file.GetName();
                sExtension = file.GetName();
                sExtension = sExtension.Substring(sExtension.LastIndexOf(".") + 1);
                if (sExtension != "xls")
                    throw new System.Exception("Select .xls/.xlsx file ");
                 ExcelImport(ExcelVersion.Excel, FilePath + "//" + FileName);
                 GetPaymentVouchers();
        }
}
public void ExcelImport(ExcelVersion ver, string FilePath)
{
	switch (ver)
        {
		
                case ExcelVersion.Excel:
                    mConnString = ProviderExcel + FilePath + ";" + ExtendedPropertiesExcel;
                    break;
                case ExcelVersion.Excel2007:
                    mConnString = ProviderExcel2007 + FilePath + ";" + ExtendedPropertiesExcel2007;
                    break;
        }
}
public void GetPaymentVouchers()
{
	OleDbConnection cn = new OleDbConnection(mConnString);
        try
        {
		cn.Open();           //   I get Error here while opening Connection...
                DataTable schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                string SheetName = schemaTable.Rows[0][2].ToString();
                StringBuilder SelectStatement = new StringBuilder();
                SelectStatement.Append("SELECT * FROM [").Append(SheetName).Append("]");
                OleDbDataAdapter da = new OleDbDataAdapter(SelectStatement.ToString(), cn);
                DataSet ds = new DataSet();
                da.Fill(ds);
	}
	catch(Exception ex)
	{}
}
Posted
Updated 9-Aug-12 2:17am
v3

You can find information on how to open an Excel file here: http://www.connectionstrings.com/excel[^]

If the file is creating properly (and you can open it directly from Excel), then it's in the right format - it must be your code that needs updating!!
 
Share this answer
 
Comments
Lokesh Zende 23-Nov-11 1:47am    
Hi _Domain S_,
Thanks for your quick response.
Please see my code and tell me if anything is wrong with it..
debbie61 4-Apr-12 13:15pm    
In respect to Damian's post that if the file is creating properly(and you can open it directly from Excel)....
That is not correct. I have run the same code over a spreadsheet multiple times and had it fail for External table format error and then magically it works.
Thanks... It was really of great help...
 
Share this answer
 
Comments
Member 8931254 21-Aug-13 0:55am    
@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ofImport.FileName + ";Extended Properties=" + "\"Excel 12.0 Xml;HDR=YES;IMEX=1\"";
I am using this connection to import a excel file but when i import .csv that time i got the exception "external table is not in the expected format" how to solve this error
Rajan Shukla 2021 31-Jul-21 7:23am    
plese check the sheet name of your csv file, which you have declare in select statement.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900