Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: J2ME excel reader

MJS [18.04.2010 23:05:23]

#

Nyt olis tarvetta lukea tietoa MS excel taulukosta puhelimella.
Ja J2ME koska ei olis niin alusta riippuvainen.

Oon pari iltaa käyttäny googlaukseen ja ei oikein apuja tunnu löytyvän.
Onkohan kellään aavistusta onko mahdollista?(Pitäishän sen kyllä olla :S)

Kitoos.

neau33 [13.05.2010 20:43:54]

#

Moikka MJS!

ehdotan, että rakentelet virityksen .csv -pohjalta elikä tallentelet excel-taulua .csv-muodossa jolloin riittää että splittaat vastanaanotetun datan

String[] rows = split(data, "\n");

for(int row = 0; row < rows.length; row++)
{
   String[] cols = split(rows[row], ";");
   for(int col = 0; col < cols.length; col++)
   {
      //simppeli tulostus
      System.out.println("rivi" + row + " sarake" + col + " :" + cols[j]);
   }
}

excelin voit säädellä päivittämään/tallentamaan/lähettämään .csv-tiedoston dataa VBA:n avulla...

'simppeli tallennus esimerkki
Sub SaveAsCVS(ByVal sheetName As String)

  Dim solu, dataStr As String

  For Each solu In Sheets(sheetName).UsedRange.Cells
   dataStr = dataStr & solu

   If solu.Column < Sheets(sheetName). _
   UsedRange.Columns.Count Then
      dataStr = dataStr + ";"
   End If

   If solu.Column = Sheets(sheetName). _
   UsedRange.Columns.Count _
   And solu.Row < Sheets(sheetName). _
   UsedRange.Rows.Count Then
      dataStr = dataStr & vbCrLf
   End If
  Next

  If Replace(Replace(dataStr, _
  ";", ""), vbCrLf, "") <> "" Then
    Dim fullPath As String
    fullPath = Environ("userprofile") _
    & "\Työpöytä\xldata.csv"
    Open fullPath For Output As #1
    Print #1, dataStr: Close #1
  End If

End Sub

neau33 [14.05.2010 14:17:48]

#

Moikka taas MJS!

yksinkertaisempaa on kuitenkin tallennella excel-taulua HTML-muodossa ja pukata sivu suoraan ftp-palvelimelle, jolloin sivu on kätevästi luettavissa ilman alusta-riippuvuuksia/J2ME-pelleilyjä...

Private Declare Function ShellExecute Lib _
"Shell32.dll" Alias "ShellExecuteA" (ByVal _
hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As _
String, ByVal lpDirectory As String, ByVal _
nshowcmd As Long) As Long

'jos excel-taulua päivitetään automaattisesti
'esim. ulkoisen datan tuonnin yhteydessä niin
'voit käyttää SetLinkOnData metodia kutsumaan
'Fire-aliohjelmaa...
'ActiveWorkbook.SetLinkOnData(Name, "Fire")

Sub Fire()
   SaveAsHTML "Taul1"
   FtpTrnasfer
End Sub

Sub SaveAsHTML(ByVal sheetName As String)

   Dim localPath As String
   localPath = "c:\xldata.html"

   On Error Resume Next
   Kill localPath
   If Err <> 0 Then
      Err.Clear
      On Error GoTo 0
   End If

   Dim solu, htmlStr As String
   htmlStr = _
   "<html><head></head><body><form><p align=" + _
   Chr(34) + "left" + Chr(34) + _
   "><b>xldata.html</b></p><table border=" + _
   Chr(34) + "1" + Chr(34) + " cellspacing=" + _
   Chr(34) + "1" + Chr(34) + " bordercolor=" + _
   Chr(34) + "#000000" + Chr(34) + ">"

   For Each solu In Sheets(sheetName).UsedRange.Cells

      If solu.Column = 1 Then
         htmlStr = htmlStr & "<tr>"
      End If

      htmlStr = htmlStr & "<td>" & solu & "</td>"
      If solu.Column = Sheets(sheetName). _
      UsedRange.Columns.Count Then
         htmlStr = htmlStr & "</tr>"
      End If
   Next

   htmlStr = htmlStr & "</table></form></body>"

   Open localPath For Output As #1
   Print #1, htmlStr: Close #1

   Do While Dir(localPath) = "": Loop

End Sub

Sub FtpTransfer()

   Dim batchPath As String
   batchPath = "C:\ftpKomento.dat"

   On Error Resume Next
   Kill batchPath
   If Err <> 0 Then
      Err.Clear
      On Error GoTo 0
   End If

   Open batchPath For Output As #1
   Print #1, "Open"
   Print #1, "ftp-palvelin"
   Print #1, "käyttäjätunnus"
   Print #1, "salasana"
   Print #1, "put " & localPath & " xldata.html" & vbCrLf
   Print #1, "Quit": Close #1

   Do While Dir(batchPath) = "": Loop

   z& = ShellExecute(Application.hwnd, vbNullString, _
   "ftp.exe", "-s:" + batchPath, "C:\", 2)

End Sub

neau33 [14.05.2010 16:01:28]

#

Moikka taas MJS!

tässä vielä viritys jolla voit hakea datan www.palvelimelta, parsia takaisin .csv muotoon ja samalla avata tiedoston excel-tauluun

VBA-Projektiin referenssi:
Microsoft WinHTTP Services, Version 5.1
(C:\WINDOWS\System32\winhttp.dll)

 'Class1  VBA-luokkamoduuli
Public Function GetData() As String

   Dim strURL As String
   strURL = "http://www.neosofta.zxq.net/xldata.html"

   Dim xhttp As WinHttp.WinHttpRequest
   Set xhttp = New WinHttp.WinHttpRequest

   On Error Resume Next
   xhttp.Open "GET", strURL, False
   xhttp.SetRequestHeader "USER_AGENT", _
   "Mozilla/5.0 (Windows; U; Windows NT 5.1; " & _
   "fi; rv:1.9.0.13) Gecko/2009073022 " & _
   "Firefox/3.0.13 (.NET CLR 3.5.30729)"
   xhttp.Send
   xhttp.GetAllResponseHeaders
   Dim strResponse As String
   strResponse = xhttp.ResponseText
   Set xhttp = Nothing

   strResponse = Replace(strResponse, vbCrLf, "")

   Dim data_beg As Long
   Dim data_end As Long
   Dim data_len As Long

   If InStr(strResponse, "<tr>") > 0 Then
    data_beg = InStr(strResponse, "<tr>") + 4
   End If

   If InStr(strResponse, "</tr></table>") > data_beg Then
      data_end = InStr(strResponse, "</td></tr></table>")
   End If
   data_len = data_end - data_beg

   If Err <> 0 Then
      GoTo Handler
   Else
      strResponse = Mid(strResponse, data_beg, data_len)
      strResponse = Replace(strResponse, "</td></tr>", vbCrLf)
      strResponse = Replace(strResponse, "</td>", ";")
      strResponse = Replace(strResponse, "<td>", "")
      strResponse = Replace(strResponse, "<tr>", "")
      GetData = strResponse
      Exit Function
   End If


Handler:
   Err.Clear
   On Error GoTo 0
   GetData = _
   "An error has occured...unknown reason"

End Function

'Taul1 VBA-moduuli

Private Sub CommandButton1_Click()

   Dim cl1 As New Class1
   Dim filePath As String
   filePath = Environ("userprofile") _
   & "\Työpöytä\HtmlToCsv.csv"

   On Error Resume Next
   Kill batchPath
   If Err <> 0 Then
      Err.Clear
      On Error GoTo 0
   End If

   Open filePath For Output As #1
   Print #1, cl1.GetData: Close #1
   Do While Dir(filePath) = "": Loop

   doFileQuery filePath, "Taul2"

End Sub

Function doFileQuery(filePath As String, _
outSheet As String) As Boolean

   Sheets(outSheet).Cells.Clear

   Dim connectionName As String
   connectionName = "TEXT;" + filePath

   With Worksheets(outSheet).QueryTables.Add( _
   Connection:=connectionName, Destination:= _
   Worksheets(outSheet).Range("A1"))
      .Name = filePath
      .FieldNames = True
      .RowNumbers = False
      .FillAdjacentFormulas = False
      .PreserveFormatting = True
      .RefreshOnFileOpen = False
      .RefreshStyle = xlOverwriteCells
      .SavePassword = False
      .SaveData = True
      .AdjustColumnWidth = True
      .RefreshPeriod = 0
      .TextFilePromptOnRefresh = False
      .TextFilePlatform = 437
      .TextFileStartRow = 1
      .TextFileParseType = xlDelimited
      .TextFileTextQualifier = _
      xlTextQualifierDoubleQuote
      .TextFileConsecutiveDelimiter = False
      .TextFileTabDelimiter = False
      .TextFileSemicolonDelimiter = True
      .TextFileCommaDelimiter = False
      .TextFileSpaceDelimiter = False
      .Refresh BackgroundQuery:=False
   End With

End Function

Metabolix [15.05.2010 18:20:01]

#

Pointti, joka ehkä ei tullut neau33:n innokkaista koodailuista vielä ilmi, on se, että Excelin omat tiedostot ovat melko mutkikasta binaaridataa eikä niiden lukeminen omalla koodilla ole käytännöllistä (tai edes nykytaidoilla realistista, jos aiheesta joutuu foorumilla kysymään). Voi olla, että joku on Javallekin tehnyt kirjaston, joka saa niistä edes jotain tolkkua, mutta usein tällaiset kirjastot ovat isoja, maksullisia, hankalia tai pahasti puutteellisia.

neau33 [19.05.2010 19:42:53]

#

HEIPPA TAAS!

Jos jotakuta sattuisi aihe vielä kiinnostamaan niin täältä voi impata Excel/VBA-projektin, josta selviää miten rakennella data-layer, jonka avulla voi palautella Cell.Formula/Cell.HorisontalAlignment -jutskat www.palvelimelta

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta