PDA

View Full Version : مشکل در ورود اطلاعات از فایل Excel



reza6384
دوشنبه 26 فروردین 1387, 22:45 عصر
سلام.
من یه فایل Excel دارم. چه وقتی با کد زیر می خونمش و توی DataGridView نمایش می دم و چه وقتی که با Sql Server اونرو Import می کنم و توی جدول یه دیتابیس می ریزم بعضی از Cell ها مقدارش Null می شه، این مشکل برای ستونهایی پیش میاد که دو نوع مقدار integer و string توی اونها ذخیره شده. من حتی فایل رو توی Microsoft Excel هم باز کردم و فرمت همه Cell ها رو Text کردم، اما بازهم خیلی از Cell ها بعد از خونده شدن مقدارشون Null می شه!!!!!!!!!!!:عصبانی++::عصبانی++::ع صبانی++::عصبانی++:



Dim Conn AsNew OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Packing_List.xls; Extended Properties=""Excel 8.0""")
Dim DS AsNew DataSet
Dim Result AsNew DataTable("Result")
DS.Tables.Add("Result")
Dim CMD AsString = "Select * From [Sheet1$]"
Dim OLEDBDA AsNew OleDbDataAdapter(CMD, Conn)
OLEDBDA.Fill(DS, "Result")
Me.DataGridView1.DataSource = DS
Me.DataGridView1.DataMember = "Result"

reza6384
سه شنبه 27 فروردین 1387, 15:41 عصر
سلام، با عرض تشکر از اینکه کسی جواب سوال اول من رو نداد، سوال دوم رو می پرسم.

کسی با Microsoft.Office.Interop.Excel کار کرده، یعنی از این طریق یک فایل Excel رو بخونه و به WorkSheet اون دسترسی پیدا کنه؟؟؟؟

من مشکل بالا رو فهمیدم، توی سایت Microsoft توی یکی از Forum ها نوشته بود که چون DataType رو از اولین سطر فایل Excel میفهمه، اگر توی اون ستون که اولین سطرش یه String اه، مقدار Integer داشتین، باید با استفاده از کد زیر به اول همه اون سلول ها مثلا یک آپستروف اضافه کنید تا اونا هم String بشن و خونده بشن :



Public Sub AddApostrophe(rngCol As Excel.Range)
Dim rngCell As Excel.Range, varCellValue As Variant
Set rngCol = rngCol.Columns(1)
For Each rngCell In rngCol.Cells
If Not IsEmpty(rngCell) Then
If IsNumeric(rngCell) Then
varCellValue = rngCell.Value
varCellValue = "'" & varCellValue
rngCell = varCellValue
End If
End If
Next rngCell
End Sub


اما من نمی دونستم اطلاعات فایلم رو چجوری باید بریزم توی Range . یعنی چجوری فایل Excel رو به اینها منعقد - Bind کنم. کد زیر رو هم پیدا کردم و اجرا کردم :




PrivateFunction GetSheetNames(ByVal path AsString) As System.Windows.Forms.ListBox
Dim lst AsNew System.Windows.Forms.ListBox
'Note: this will not work for Excel 2007 (.xlsx) workbooks.
If IO.File.Exists(path) AndAlso IO.Path.GetExtension(path) = ".xls"Then
Dim app AsNew Excel.Application
Dim WB As Excel.Workbook
Try
WB = app.Workbooks.Open(path, Type.Missing, Type.Missing, Type.Missing, Type.Missing, , Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing)
If WB IsNotNothingThen
ForEach ws As Excel.Worksheet In WB.Sheets
lst.Items.Add(ws.Name)
Next
WB.Close()
System.Runtime.InteropServices.Marshal.ReleaseComO bject(WB)
WB = Nothing
EndIf
Catch ex As Exception
MsgBox(ex.Message)
Finally
System.Runtime.InteropServices.Marshal.ReleaseComO bject(app)
app = Nothing
EndTry
EndIf
Return lst
EndFunction


اما بعد از اجرای این کد این Error رو میده :

:عصبانی++::عصبانی++::عصبانی++:: صبانی++::عصبانی++:

reza6384
چهارشنبه 28 فروردین 1387, 10:50 صبح
چرا هیچ کس جواب سوال من رو نمی ده؟؟؟؟
خیلی هم سخت نباید باشه.:گریه::گریه::گریه::عصبان ی++::عصبانی++::عصبانی++:

reza6384
چهارشنبه 28 فروردین 1387, 16:19 عصر
سلام.
و من باز هم تشکر می کنم از اینکه هیچ کس جواب سوال من رو نداد و لااقل کسی یه پست هم نزد که دلم خوش باشه.
بالاخره راه حل مشکل رو پیدا کردم :

اگر به این Error برخوردید :

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

راه حل مشکل اینجاست :

http://blog.crowe.co.nz/archive/2006/03/02/589.aspx

و اگر به این Error برخوردید :

Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))
راه حل مشکل اینجاست :

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=384846&SiteID=1


---------------------------------------------------------------------------------------------------

This is actually a bug in Excel. It occurs when you are automating excel and you are using an english version of excel but have your locale set to another language.
You should set the current culture of the thread to "en-US" before calling the method, and set it back afterwards


System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCultu re;
System.Threading.Thread.CurrentThread.CurrentCultu re = new System.Globalization.CultureInfo("en-US");
//call Excel method here
System.Threading.Thread.CurrentThread.CurrentCultu re = CurrentCI;

I had this issue when using the following Excel methods/properties:


calling Workbook.IsAddin

Enabling / Disabling a menu item (CommandBarButton.Enabled)

calling Workbook.Name (on ActiveWorkbook)

calling Workbook.FullName (on ActiveWorkbook)

fahimfallahi
دوشنبه 05 اسفند 1387, 16:35 عصر
خيلي ماهي :قلب:
من دو روز تمام به اندازه 18 ساعت
اين مشكل را داشتم و اكسل نصب مي كردم و فكر كردم اشكال از dll interop است
خيلي متشكرم كه شما آن را برطرف كردييد:تشویق::تشویق:

mom alone
سه شنبه 06 اسفند 1387, 17:24 عصر
ممنون عزیزم
الهی فدات بشم من

morteza_1234m
شنبه 26 اردیبهشت 1388, 19:50 عصر
دمت گرم خیلی مردی واقعا اگر این پست رو دیده بودم لاقل بهت دلداری میدادم
برای اینکه جمله دوستمون رو کامل کنم
هم ماهی هم خوشگلی

reza6384
سه شنبه 24 شهریور 1388, 17:49 عصر
آقایون ممنون از پست هاتون ، مخلص همه شما هم هستیم.

shirin_sh1024
سه شنبه 09 شهریور 1389, 11:28 صبح
راه حل مشکل اینجاست :

http://forums.microsoft.com/MSDN/Sho...84846&SiteID=1 (http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=384846&SiteID=1)

اررور 404 میده
:ناراحت:

corona
پنج شنبه 11 فروردین 1390, 14:33 عصر
دوست عزیز صفحاتی که لینک دادی وجود ندارن، من مشکل اول رو دارم، خواهشاً اگه لطف کنی راه حلش رو بگی خیلی خیلی ممنون میشم.

titrajh
سه شنبه 24 مرداد 1391, 09:09 صبح
سلام دوستان من یک سئوالی دارم اگر میشه راهنماییم کنین که چگونه میتونم کدی بنویسم که از داخل خود برنامه Vb.net یا C# پایگاه داده خودم رو در sql Server با یک فایل Excel جدا Update کنم خیلی ممنون میشم .