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.
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 SubMoikka 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 SubMoikka 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 FunctionPointti, 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.
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.