[vb6 & Excel 2K] Met

Pagina: 1
Acties:

  • DPLuS
  • Registratie: April 2000
  • Niet online
Ik wil via ShellExecute een comma-delimited (csv) bestand openen in Excel.

Normaal deed ik dat altijd via de volgende code:
code:
1
Shell "C:\Program Files\Microsoft Office\Office\EXCEL.EXE " & App.Path & "\test.csv"

totdat ik erachter kwam dat niet iedereen Excel in c:\program files heeft staan.
Nu las ik dat ShellExecute zelf kijkt welk programma er hoort bij een bepaalde extensie.

Ik heb nu het volgende:

in module1.bas:
code:
1
2
3
4
5
Private Declare Function ShellExecuteA Lib "shell32.dll" ( _
    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


in form1.frm:
code:
1
Call ShellExecute(Me.hwnd, "open", App.Path & "\test.csv", vbNullString, vbNullString, vbNormalFocus)


In principe gaat alles goed, Excel opent het csv bestand MAAR:

Excel interpreteert nu het csv bestand als een gewoon TEKST-bestand.

Uitleg:

Dit is bijv. de eerste regel uit het csv bestand:

Naam1; 0202918726; 001; B

Maar bovenstaande regel staat in zijn geheel in cel A1 van Excel, en niet verdeeld over 4 kolommen zoals dat gewoonlijk zou moeten gaan met csv bestanden.

Hoe kan het dat met ShellExecute niet hetzelfde resultaat wordt geboekt als met Shell "C:\Program Files\Microsoft Office\Office\EXCEL.EXE " & App.Path & "\test.csv"?

Want met de methode die ik dus eerst gebruikte "parste" Excel het csv bestand WEL goed!

[edit] Er stonden aanhalingstekens in de title, kon React blijkbaar niet hebben...
Moet zijn: [vb6 & Excel 2K] Met ShellExecute een csv-bestand openen...

[ Voor 11% gewijzigd door DPLuS op 01-12-2003 17:29 ]


  • KingRichard
  • Registratie: September 2002
  • Laatst online: 21-03-2025

KingRichard

former Duke of Gloucester

ShellExecute(Me.hwnd, "open"... doet hetzelfde als de verkenner van Windows, als je rechtsklikt op het CSV-bestand en voor Openen kiest. CSV is dus blijkbaar gekoppeld aan Notepad o.i.d.
Een veilige methode is het gebruik van de Microsoft Excel Object Library. Als die actief is (zie References), kun je de Excelapplicatie direct besturen.
Visual Basic:
1
2
3
4
5
6
7
8
Dim objXL As Excel.Application
Dim objWkb As Excel.Workbook
Const conWKB_NAME = "J:\temp\book1.xls"
  Set objXL = New Excel.Application
  With objXL
    .Visible = True
    Set objWkb = .Workbooks.Open(conWKB_NAME)
  ' etc. etc.

a horse! a horse! my kingdom for a horse! (exeunt)
[got.profile] | [t.net.profile] | [specs]


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 18:19

Crazy D

I think we should take a look.

Wat doet Excel als je dubbelklikt op de csv file? Bij mijn weten doet ShellExecute hetzelfde als wanneer je dubbelklikt in de windows explorer. Iig werkt het hier (WinXP) prima.

Ben het wel eens dat de manier van KingRichard veiliger is, dan kun je ook meteen zorgen dat de columns de juiste numberformat hebben en dergelijke :)

Exact expert nodig?


  • DPLuS
  • Registratie: April 2000
  • Niet online
Als ik erop dubbelklik opent 'ie hem zoals de shellexecute methode hem ook opent.
Ik vind het dan alleen raar dat als ik via een dos-prompt:
"excel.exe een-willekeurig-csv-bestand.csv"
doe, wel correct "formatteert".

  • KingRichard
  • Registratie: September 2002
  • Laatst online: 21-03-2025

KingRichard

former Duke of Gloucester

Dat is niet zo raar: als je in de DOS-prompt bestand.csv [ENTER] doet, opent 'ie hem weer in Notepad.

a horse! a horse! my kingdom for a horse! (exeunt)
[got.profile] | [t.net.profile] | [specs]


  • Tukk
  • Registratie: Januari 2002
  • Laatst online: 17:14

Tukk

De α-man met het ẞ-brein

Waarom zoek je niet in de registry waar excel is geinstalleerd en gebruik je dit pad in plaats van je hard gecodeerde 'C:program files' ?

Dan is je probleem toch ook verholpen?

Daarbij kun je nu het probleem krijgen dat mensen een csv kunnen koppelen aan word en dat jij word opstart zonder dat je het weet, waardoor je app het niet meer doet zoals verwacht. (oftewel, hoe newbie-veilig moet je app zijn)...

Is trouwens Excel als OLE-object niet de oplossing?
Dan kun je helemaal controleren wat je met excel doet.


edit:

OLE-Verhaal, en daarna heb ik de thread beter gelezen en weer het OLE-verhaal door gestreept, het idee was al aangedragen

[ Voor 28% gewijzigd door Tukk op 02-12-2003 10:32 ]

Q: How many geeks does it take to ruin a joke? A: You mean nerd, not geek. And not joke, but riddle. Proceed.

Pagina: 1