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.TextToteutus 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 ClassKiitoksia 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.TextMutta 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 SubKiitoksia 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.