Ongelmani on tietojen tulostaminen Textboxeista Excel-kenttään seuraavalla koodilla:
Dim xlApp As Microsoft.Office.Interop.Excel.Application Dim xlBook As Microsoft.Office.Interop.Excel.Workbook Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet Set xlApp = CreateObject("Microsoft.Office.Interop.Excel.Application ") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) 'Syötettävää kamaa. xlSheet.Cells(1, 1) = TextBox1.Text
Toteutus kuitenkin kusee ja antaa "Exception was unhandled" -Cannot create ActiveX component, viitaten neljänteen riviin. Add referencessä lisättynä on mm. Microsoft Excel 12.0 Object Library ja Microsoft ActiveX Data Objects 2.8 Library, mutta ongelma pysyy.
Terve,
Voi olla että, minulla on vanhempi Office käytössä, mutta löytyykö sinulta referenssiä Microsoft.Office.Core
Imports System.IO Imports Microsoft.Office.Core ... Dim oXL As Excel.Application Dim oWB As Excel.Workbook Dim oSheet As Excel.Worksheet Dim oRng As Excel.Range ' Start Excel and get Application object. oXL = CreateObject("Excel.Application")
Tämä toimii minulla, mutta voipi olla vanhentunut.
Jep, ei pelittänyt minulle: "Muoto on vanha tai tyyppikirjasto ei kelpaa". Kiitoksia kuitenkin.
Jahas syynä ongelmaan näköjään oli kielissä. Koska XP pyöri suomeksi ja excel englanniksi, homma ei pelittänyt. Ratkaisuksi löytyi seuraavaa:
Dim oApp As New Microsoft.Office.Interop.Excel.Application() oApp.Visible = True oApp.UserControl = True Dim oBooks As Object = oApp.Workbooks Dim ci As System.Globalization.CultureInfo = New _ System.Globalization.CultureInfo("en-US") oBooks.GetType().InvokeMember("Add", Reflection.BindFlags.InvokeMethod, _ Nothing, oBooks, Nothing, ci)
Tämän kanssa olen kuitenkin aivan jumissa. Miten saan tuohon pakettiin lyötyä tiedoston avauksen mukaan, esim. c:\E1.xls sekä sheet rakenteen tyyliin aSheet.Cells(2, 2) = textbox1.text?
Oletko luonut uuden workbookin?
oBooks = oApp.Workbooks.Add aSheet = oBooks.ActiveSheet
Voipi olla taas vanhaa tietoa :D
Sheet syötön sain toimimaan jo aikaisemmin, joskin en tuon .Add kanssa. Sitä käyttäessäni puskee kokoajan: COMException was unhandled - "Muoto on vanha tai tyyppikirjasto ei kelpaa. (Exception from HRESULT: 0x80028018)". Sen sijaan excel tiedoston avausta en vaan saa pelittämään sitten millään.
Moikka moks!
olisikohan kenties oheisesta sälästä mitään apua..?
Imports Excel=Microsoft.Office.Interop.Excel Imports System Public Class xlLuokka Public Shared WithEvents xlapp As Excel.Application = New Excel.Application() Public Shared xlbook As Excel.Workbook Public Shared xlsheet As Excel.Worksheet Public Sub Avaa(ByVal strTykirja As String) xlApp = CType(CreateObject("Excel.Application"), Excel.Application) xlBook = CType(xlApp.Workbooks.Add(strTykirja), Excel.Workbook) xlsheet = CType(xlBook.Worksheets(1), Excel.Worksheet) xlsheet.Application.Visible = True End Sub Public Sub UusiTykirja() xlApp = CType(CreateObject("Excel.Application"), Excel.Application) xlBook = CType(xlApp.Workbooks.Add(Type.Missing), Excel.Workbook) xlsheet = CType(xlBook.Worksheets(1), Excel.Worksheet) xlsheet.Application.Visible = True End Sub Public Sub Sulje() Try xlbook.Close() Catch ex As Exception End Try End Sub Public Sub TallennaNimella(ByVal strKokoPolku As String) Try xlBook.SaveAs(strKokoPolku) Catch ex As Exception End Try End Sub Public Sub AktivoiSivu(ByVal strSivu As String) Try CType(xlBook.Worksheets(strSivu), Excel.Worksheet).Activate() xlsheet = Ctype(xlbook.Activesheet, Excel.Worksheet) Catch ex As Exception End Try End Sub Public Sub AktivoiSolu(ByVal x As Integer, ByVal y As Integer) CType(CType(xlBook.ActiveSheet, Excel.Worksheet).Cells(x, y), Excel.Range).Activate() End Sub Public Function LueSolu(ByVal x As Integer, ByVal y As Integer) As String LueSolu = CStr(CType(CType(xlBook.ActiveSheet, Excel.Worksheet).Cells(x, y), Excel.Range).Value) If Not LueSolu = "" Then Messagebox.Show(LueSolu.ToString()) End Function Public Sub KirjoitaSoluun(ByVal x As Integer, ByVal y As Integer, ByVal arvo As String) CType(xlBook.ActiveSheet, Excel.Worksheet).Cells(x, y).Value=arvo End Sub End Class
Kiitoksia paljon Nealle vastauksesta! Jotain pystyin tuosta soveltamaan sekä parin muun lähteen kautta sain vihdoin valmiin excel pohjan aukeamaan seuraavasti:
Dim oApp2 As New Microsoft.Office.Interop.Excel.Application() Dim xlSheet2 As Object oApp2.Visible = True oApp2.UserControl = True Dim oBooks2 As Object = oApp2.Workbooks Dim oldCl2 As System.Globalization.CultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("en-US") oApp2.Workbooks.Open("c:\1.xlsx") System.Threading.Thread.CurrentThread.CurrentCulture = oldCl2 xlSheet2 = oApp2.Worksheets(1) xlSheet2.cells(2, 2) = TextBox1.Text
Mutta vieläkin on ongelmia! Nyt menee jo varmaan tyhmyyden puolelle, mutten silti onnistu lukemaan kenttiä excelistä textboxiin. Tuolla xlSheet2.cells(2, 2) = Textbox1.Text pystyn kyllä kirjoittamaan ongelmitta exceliin, mutta toisinpäin homma tökkii taas ja pahasti.
Moikka taas moks!
kokeile seuraavanlaista kaavaa...
'... '... Public Sub AktivoiSivu(ByVal strSivu As String) Try CType(xlBook.Worksheets(strSivu), Excel.Worksheet).Activate() xlsheet = Ctype(xlbook.Activesheet, Excel.Worksheet) Catch ex As Exception End Try End Sub Public Function LueSolu(ByVal x As Integer, ByVal y As Integer) As String Dim Arvo As Object = _ CStr(CType(CType(xlBook.ActiveSheet, Excel.Worksheet).Cells(x, y), Excel.Range).Value) Return(Arvo.ToString()) End Function Public Sub KirjoitaBoxiin() AktivoiSivu("Sheet2") Textbox1.Text = LueSolu(2,2) End Sub
Kiitoksia jälleen vastauksesta. Melkoisen tappelun jälkeen sain homman toimimaan. Ratkaisuna oli tunkea tuota cultureinfo rivistöä useampaankin väliin, mistä homma tosiaan kiikasti.
Aihe on jo aika vanha, joten et voi enää vastata siihen.