Odczyt danych z komórki EXCELA

dział ogólny

Odczyt danych z komórki EXCELA

Nowy postprzez Corvis » środa, 28 lipca 2010, 16:39

Witam,

Mam program ktory zapisuje mi dane do 1 komórki EXCELA. Chciałbym zrobić swój program w taki sposób abym te dane miał bezpośrednio w moim programie. A nie w pliku Excela. Ten program który zapisuje te dane może to robić tylko do EXCELA. Jak to zrobić żeby wlatywało to odrazu do mojej aplikacji ???


Pozdrawiam


EDIT:

Dodam jeszcze, żeby działało zrzucanie danych arkusz excela musi być cały czas otwarty.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Odczyt danych z komórki EXCELA

Nowy postprzez Cyfrowy Baron » środa, 28 lipca 2010, 19:26

Chciałbym zrobić swój program w taki sposób abym te dane miał bezpośrednio w moim programie. A nie w pliku Excela.


Czyli chcesz napisać program, który będzie czytał pliki w formacie XLS?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Odczyt danych z komórki EXCELA

Nowy postprzez wargo » środa, 28 lipca 2010, 19:52

Raczej aby przesyłał dane do excela, który otworzył plik...
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
Podziękował : 12
Otrzymał podziękowań: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    WindowsFirefox

Re: Odczyt danych z komórki EXCELA

Nowy postprzez Cyfrowy Baron » środa, 28 lipca 2010, 19:54

Mam program ktory zapisuje mi dane do 1 komórki EXCELA.


Co to za program? Ty go napisałeś, czy też to jakiś inny, jaki?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Odczyt danych z komórki EXCELA

Nowy postprzez polymorphism » środa, 28 lipca 2010, 20:24

Corvis, brawo za zadanie zrozumiałego pytania :lol:

Dwie potencjalne odpowiedzi:
  • jeśli chodzi o czytanie plików XLS, to ta opcja raczej odpada. Jest to format zamknięty.
  • jeśli chodzi o komunikację aplikacja <-> excel, wtedy zastosuj mechanizm OLE automation. Po szczegóły odsyłam do PSDK.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Odczyt danych z komórki EXCELA

Nowy postprzez Cyfrowy Baron » środa, 28 lipca 2010, 20:26

Istnieje jeszcze trzecia możliwość. Jakiś program wysyła do 1 komórki Excela jakieś dane, a Corvis chce te dane przechwycić do swojego programu, ale bez udziału Excela, czyli jakiś program wysyła dane do 1 komórki Excela bez Excela.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Odczyt danych z komórki EXCELA

Nowy postprzez Corvis » środa, 28 lipca 2010, 22:30

Właśnie coś mi się wydawało, że pokrętnie to napisałem ;) Sorry :)


1. Program ktróry zapisuje dane do komorki EXCELa to ROUTERS do notowań giełdowych - nie jest mój :)
2. Problem polegam na tym, że wersja która mam może to zrobić tylko do EXCELa ( dokładnie do 1 komórki )
3. Ja muszę się dostać swoją aplikacja do danych które są wysyłane do tej komórki EXCELA

Próbuje to zrobić poprzez ADO

Ustawiłem sobie ConnectionString:

Kod: Zaznacz cały
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\Users\IMS\Desktop\Zeszyt1.xls;Mode=Read;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;



I wszystko jest fajnie, jak plik Zeszyt1.xls nie jest otwarty (wtedy podłączam się do niego jak chce). Jeżeli uruchamiam notowania i zapis do komórki EXCELA nie mogę się już połączyć przez ADO bo pisze, że plik jest używany - próbowałem ustawić połączenie jako READ ONLY ale o nic nie daje.


Sorry, za wczesniejsze słąbe wyjasnienie
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Odczyt danych z komórki EXCELA

Nowy postprzez mckri » środa, 28 lipca 2010, 22:38

Ja dawno temu skorzystałem z komponentu (niestety nie darmowego). Bez pomocy programu MS Excel możliwy jest zarówno zapis jak i odczyt danych z pliku xls. Obsługa funkcji komponentu i komunikacja z plikiem xls bezproblemowa. Podaję link: http://www.axolot.com/

Za ten post autor mckri otrzymał podziękowanie od:
Corvis
Avatar użytkownika
mckri
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): piątek, 15 sierpnia 2008, 13:48
Podziękował : 10
Otrzymał podziękowań: 2
System operacyjny: Windows Vista SP2
Kompilator: BCB 5/2007/2009
    Windows VistaInternet Explorer 8

Re: Odczyt danych z komórki EXCELA

Nowy postprzez Cyfrowy Baron » czwartek, 29 lipca 2010, 09:20

Jeżeli ten program jest zaprogramowany do tego, żeby wysyłać dane do programu Excel to do Twojego ich nie wyśle. Można by oczywiście stworzyć aplikację, która by udawała Excela, czyli program miałby nazwę klasy okna XLMAIN (Office 2003) a tabela miałaby nazwę klasy EXCEL7. Mogłoby to zadziałać tylko przy założeniu, że ten ROUTERS pobiera uchwyt do programu poprzez nazwę klasy okna i nazwę klasy tabeli. To jednak nie wystarczy, gdyż ten program wysyła konkretne komunikaty, które Twój program musiałby obsłużyć. Należałoby więc ustalić co to są za komunikaty. Gdyby udało się to zadanie zrealizować w ten sposób, Twój problem zostałby rozwiązany, gdyż ROUTER wysyłałby dane bezpośrednio do Twojego programu.

Co do tego, że plik jest używany, to prawdopodobnie jest on używany przez program ROUTERS, który go blokuje, gdyż Excel nie blokuje plików. Dopóki działa ROUTERS nie uzyskasz dostępu do pliku.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Odczyt danych z komórki EXCELA

Nowy postprzez Corvis » czwartek, 29 lipca 2010, 09:55

Dzięki za odpowiedzi.


Na tą chwilę stoje na czymś takim:


1. W EXcelu w zakładce Narzędzia -> Udostępnij Skoroszyt -> zaznaczyłem opcję : Pozwalaj na zmiany wprowadzane przez wielu użytkowników jednocześnie.
2. Stworzyłem swój program za pomoca ADOConnection i ADODataSet oraz TTimera.

Program działa następująco ( i działa ale działa wolnooooo zaraz wyjaśnię czemu )

- ConnectionString AdoConnection:

Kod: Zaznacz cały
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\Users\IMS\Desktop\Zeszyt1.xls;Mode=Read;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;HDR=No;IMEX=1;


- CommandText AdoDataSet:

Kod: Zaznacz cały
SELECT *FROM [Arkusz1$];



Gdy odpalam DataSeta - wszystko działa. Problem pojawia się w tedy gdy teraz chce zapisać coś w Excelu ( Excel wywala błąd, że plik jest zablokowany - mimo udostępnienia do modyfikownia przez innych)

Dlatego w TTimerze zrobiłem coś takiego: ( Jest to bardzooooooo słabe rozwiązanie )

Kod: Zaznacz cały
AdoDataSet->Open(); <--- otwarcie i pobranie danych z excela
AdoConnection->Close(); <--- odblokowanie pliku


Działa to wolno, bo za każdym tikiem timera musze się łączyć i rozłączać przez ADOConnection - inaczej blokuje Excela. Jeżeli jest to zrobione tak jak napisałem da się modyfikować excela i po zapisaniu danych w excelu zmiana jest widoczna w moim programie. Alllleeeeeeeeeeeeeee działa to dopiero wtedy gdy zapiszę arkusz excela :(. Podejście z Timerem i łączeniem i rozłączaniem zamula aplikację bo TTimer musi chodzić bardzo szybko co 10 ms conajmniej. ( To wynika z moich potrzeb otrzymywania danych. Niewiem jak zrobić AutoSave w Excelu jak tylko coś się zmieni. ( o ile tak się wogole da )


Pozdrawiam,
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Odczyt danych z komórki EXCELA

Nowy postprzez Cyfrowy Baron » czwartek, 29 lipca 2010, 10:41

Niewiem jak zrobić AutoSave w Excelu jak tylko coś się zmieni.


Excel nie ma takiej funkcja, ale możesz wysłać do Excela polecenie zapisania do pliku Zapisz (komenda 4) lub Zapisz Jako (komenda 5):

KOD cpp:     UKRYJ  
HWND hWnd = FindWindow("XLMAIN", 0);
 if(hWnd == NULL)
 {
  ShowMessage("Nie odnaleziono programu");
  return;
 }


 SendMessage(hWnd, WM_COMMAND, 4, 0);
 //Zapisz jako: SendMessage(hWnd, WM_COMMAND, 5, 0);
 

Testowane na Excel 2003

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Corvis
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Odczyt danych z komórki EXCELA

Nowy postprzez polymorphism » czwartek, 29 lipca 2010, 10:47

3. Ja muszę się dostać swoją aplikacja do danych które są wysyłane do tej komórki EXCELA

A próbowałeś wspomniany OLE automation? Bo z tego co wyczytałem, ADO to interfejs bazodanowy, i raczej operuje na pliku XLS, a nie bezpośrednio na excelu.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Odczyt danych z komórki EXCELA

Nowy postprzez Corvis » czwartek, 29 lipca 2010, 14:57

A próbowałeś wspomniany OLE automation? Bo z tego co wyczytałem, ADO to interfejs bazodanowy, i raczej operuje na pliku XLS, a nie bezpośrednio na excelu.



jeszcze nie, zaraz zobacze :)



EDIT:


http://blong.co.uk/Conferences/BorConUK ... BcbOle.htm

Ma ktoś jakiś opis tego Ole automaticon pod buildera ???

bo te co sa to dla wersji 5-6 i ni w kij nie pasuje do 2010 :P
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Odczyt danych z komórki EXCELA

Nowy postprzez polymorphism » czwartek, 29 lipca 2010, 17:07

http://www.codeproject.com/KB/office/MSOfficeAuto.aspx <- Miluśki COM 8-)

Lista metod/właściwości excel.application -> link.
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
Corvis
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Odczyt danych z komórki EXCELA

Nowy postprzez polymorphism » piątek, 30 lipca 2010, 16:48

I co, jak postępy z OLE automation?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Następna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 4 gości