PDA

View Full Version : سوال: ارور پیدا نشدن Sheet1$ موقع import فایل اکسل



saeed_sho
سه شنبه 28 شهریور 1391, 14:19 عصر
با سلام
من میخوام در برنامم امکان import کردن فایل اکسل رو بزارم بطوری که اطلاعاتو بریزم در دیتاتیبل بعد بریزم در دیتابیسم
هم توی همین سایت گشتم و هم سایت های خارجی همه کانکشن استرینگشون این بود این بخشی از کدمه که میزارم به اون خط excelDa.Fill(dt_excel) ارور میده
Dim excelConnection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & fu_import.PostedFile.FileName & ";Extended Properties=""Excel 8.0;HDR=No;""")
If (excelConnection.State = ConnectionState.Closed) Then excelConnection.Open()
Dim excelDa As New OleDbDataAdapter("SELECT * FROM [Sheet1$]", excelConnection)
Dim dt_excel As New DataTable()
If (dt_excel.Rows.Count > 0) Then dt_excel.Clear()
excelDa.Fill(dt_excel)
ارورش اینه
The Microsoft Jet database engine could not find the object 'Sheet1$'. Make sure the object exists and that you spell its name and the path name correctly.

اگه پسوند فایل .xls باشه ارور بالا رو میده و اگه .csv و .xlsx باشه در کد excelConnection.Open() این ارور میده
Cannot update. Database or object is read-only.

در ضمن اینم میدونم که باید ویژوال استودیو رو با run as administrator اجرا کنم
لطفا راهنمایی کنید

saeed_sho
سه شنبه 28 شهریور 1391, 17:53 عصر
اسم Sheet1$ وجود داره نمیدونم چرا نمیشناسه
راستی ورژن آفیسی که استفاده میکنم 2007 گفتم شاید تاثیری داشته باشه
لطفا راهنمایی کنید

hamed_hossani
سه شنبه 28 شهریور 1391, 17:57 عصر
من اینو نوشتم جواب میده

string conectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db\code branch.xls;Extended Properties=Excel 8.0;";
OleDbConnection connection = new OleDbConnection(conectionString);

string Query = @"select * from [code$]";
//A:F] inner join [Sheet2$H:J]
// on sheet2$A:F.[id] =Sheet2$H:J.[id] ";

OleDbDataAdapter adapter = new OleDbDataAdapter(Query, connection);
DataTable dtExcel = new DataTable();

connection.Open();
adapter.Fill(dtExcel);
connection.Close();

hamed_hossani
سه شنبه 28 شهریور 1391, 18:00 عصر
";Extended Properties=""Excel 8.0;HDR=No;"""
این قسمت را اصلاح کنید
دوتا " کنار هم نباشد

saeed_sho
سه شنبه 28 شهریور 1391, 20:11 عصر
string Query = @"select * from [code$]";
من با همون Sheet1$ پیش فرض زدم فرقی میکنه با code1$ شما؟
من آدرس فایلو با fileUpload دادم تاثیری که نداره؟ در پست اول کدش هست
کانکشن استرینگ برای نوع پسوندهای مختلف فرق میکنه؟
کدمو مثل شما تغییر میدم ببینم درست میشه

hamed_hossani
سه شنبه 28 شهریور 1391, 22:40 عصر
اون code نام شیت(برگ)فایل اکسل من است

من آدرس فایلو با fileUpload دادم تاثیری که نداره؟
با ابزار break point ویژوال استدیو پروژه را مرحله به مرحله اجرا کنید>نگاه کنید کانکشن استرینگ را درست نوشتید!

کانکشن استرینگ برای نوع پسوندهای مختلف فرق میکنه؟
بله اگر 2007 و یا 2003 باشه فرق می کنه >به connectionString.com مراجعه کنید

saeed_sho
پنج شنبه 30 شهریور 1391, 09:48 صبح
کد خودمو اون جوری که گفتین تغییر دادم
Dim excelConnection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & fu_import.PostedFile.FileName & ";Extended Properties=Excel 8.0;HDR=No;")
If (excelConnection.State = ConnectionState.Closed) Then excelConnection.Open()
Dim excelDa As New OleDbDataAdapter("SELECT * FROM [Sheet1$]", excelConnection)
Dim dt_excel As New DataTable()
If (dt_excel.Rows.Count > 0) Then dt_excel.Clear()
excelDa.Fill(dt_excel)
حالا موقع باز شدن کانکشن این ارور میده
Could not find installable ISAM.
breakpoint گذاشتم فایل من در درایو d اما فایل آپلود فقط اسم فایلو نشون میده
اون سایتی هم که گفتید هر قسمتش میخوام برم واکنشی نشون نمیده فکر کنم گذاشتن برای فروش

masoud_z_65
پنج شنبه 30 شهریور 1391, 12:26 عصر
دوست عزیز این مشکلت رو حل میکنه:



string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ReturnPathOfFile() + ";Extended Properties=Excel 12.0;";
OleDbConnection objConn = new OleDbConnection(connStr);
objConn.Open();
DataTable DTSheets = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables , null);

string[] excelSheets = new string[DTSheets.Rows.Count];
int i = 0;
foreach (DataRow row in DTSheets.Rows)
{
excelSheets[i] = row["TABLE_NAME"].ToString();
i++;
}
OleDbCommand objCmdSelect = null;
try
{
objCmdSelect = new OleDbCommand("SELECT * FROM [sheet1$]", objConn);
}
catch (Exception ex)
{
Page.AddErrorMessage("sheet1 not exist", "");
Page.RollbackTransaction();
}
OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
objAdapter1.SelectCommand = objCmdSelect;
DataSet objDataset1 = new DataSet();
objAdapter1.Fill(objDataset1, "CourseFormation");
objConn.Close();

hamed_hossani
پنج شنبه 30 شهریور 1391, 15:35 عصر
breakpoint گذاشتم فایل من در درایو d اما فایل آپلود فقط اسم فایلو نشون میده
در صورت مشکل>فایل را در یک پوشه سایت ذخیره کنید + ادرس ان پوشه +نام را به کانکشن استرینگ بدهید!

ادرس یک s کم داشت
http://www.connectionstrings.com/

saeed_sho
پنج شنبه 30 شهریور 1391, 17:25 عصر
دوست عزیز این مشکلت رو حل میکنه:



string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ReturnPathOfFile() + ";Extended Properties=Excel 12.0;";
OleDbConnection objConn = new OleDbConnection(connStr);
objConn.Open();
DataTable DTSheets = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables , null);

string[] excelSheets = new string[DTSheets.Rows.Count];
int i = 0;
foreach (DataRow row in DTSheets.Rows)
{
excelSheets[i] = row["TABLE_NAME"].ToString();
i++;
}
OleDbCommand objCmdSelect = null;
try
{
objCmdSelect = new OleDbCommand("SELECT * FROM [sheet1$]", objConn);
}
catch (Exception ex)
{
Page.AddErrorMessage("sheet1 not exist", "");
Page.RollbackTransaction();
}
OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
objAdapter1.SelectCommand = objCmdSelect;
DataSet objDataset1 = new DataSet();
objAdapter1.Fill(objDataset1, "CourseFormation");
objConn.Close();


شما آرایه ی excelSheet رو پر کردین اما هیچ جایی استفاده نکردین میشه در موردش یکم توضیح بدین و بگین چرا این کارو کردین

saeed_sho
جمعه 31 شهریور 1391, 10:42 صبح
فایلو با کنترل فایل آپلود از کاربر میگیرم و شرط fileUpload1.HasFile گذاشتم و با اینکه فایلی رو انتخاب کردم بازم ازش رد میشه
اینم بگم فایل آپلود رو داخل updatePanel گذاشتم
میشه لطفا راهنمایی کنید

saeed_sho
جمعه 31 شهریور 1391, 14:40 عصر
فایل آپلود رو گذاشتم داخل updatePanel و فهمیدم فایل آپلود اگه داخل updatePanel باشه کار نمیکنه
تگ trigger هم استفاده کردم درست نشد
بجای فایل آپلود از asyncFileUpload استفاده کردم اونم درست کار نکرد و HasFile رو false برمیگردونه
تا از این شرط نگذره فایل اکسل رو import نمیکنه
لطفا راهنمایی کنید