Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Czytanie stringow z komorek Excell'a
upadly




Typ: neutral
Postów: 7
Zarejestrowany: Nov 2003
Czytanie stringow z komorek Excell'a

Witam!
Stworzylem program do obslugi arkusza Excella zawierajacego tlumaczenia tego samego textu w wielu jezykach. Program zapisuje do pliku porownanie dwoch wersji jezykowych. Kod wyglada mniej wiecej tak:

Open "plik.txt" As intPlik
Print intPlik, Cells(row,1) + Cells(row,col)
Close intplik

Wszystko było ok do momentu, gdy probowalem zaladowac za pomoca Cells(row,col) tekst wloski. Wtedy znaki wlasciwe dla tego jezyka byly zastepowane jakimis odpowiednikami. Juz w podgladzie debuggera zmienna miala nie taka wartosc.

Co trzeba zrobic aby przez odniesienie sie do wartosci komorki otrzymac wlasciwy, to znaczy identyczny z podanym w tabeli, znak. Prosze o porade w tej kwestii, ewentualnie propozycje innego rozwiazania.

05-11-2003 14:08
Pokaż profil upadly  Wyślij email do upadly   
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003
mało danych

Za mało podałeś informacji.
Daj jakiś przykład, np.:
znak polski | znak zagraniczny
ł          | ^

Dlaczego zapisujesz dane do pliku tekstowego? Czy tworzysz listę polskich słów i ich odpowiedników w innym języku?


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

06-11-2003 14:22
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
upadly




Typ: neutral
Postów: 7
Zarejestrowany: Nov 2003
wiecej danych

przykladem moze byc np: e z akcentem (kreska nad e w lewa strone) zamieniane jest na zwykle e. znaki nie wyswietla sie poprawnie na tej stronie wiec ich nie podaje.
wlasnie po to to robie. mam arkusz excela zawierajacy kilkanascie tysiecy wierszy i okolo 15 kolumn. to taki private-multi-language-table.
probowalem tez sposobem chlopskim - tworzylem nowy arkusz i zapisywalem w txt. niestety gdy chce zapisywac arkusz w formie pliku textowego z tabulatorami w miejscach owych znakow pojawiaja sie znaki zapytania. zmiana wersji jezykowej pakietu office odpada - program nie dziala (np: w wersji wloskiej obiekt ComboBox zwraca string a nie integer!).

06-11-2003 14:47
Pokaż profil upadly  Wyślij email do upadly   
upadly




Typ: neutral
Postów: 7
Zarejestrowany: Nov 2003
wiecej danych part 2

choc moze byc to przydatne:

&ugrave; - u
é        - e
&Egrave; - E

wyswietla sie zle no ale..

06-11-2003 14:56
Pokaż profil upadly  Wyślij email do upadly   
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003
test

Słuchaj, zrobiłem coś takiego i działa!
W przypadku Twoich danych, które podałeś.

Option Explicit
Const plik As String = "C:slownik.txt"
Const notepad As String = "notepad.exe "

Sub ZapiszDoTxt()
Dim numFile As Long
Dim i As Long
Dim pathNotepad As String, strTemp As String

pathNotepad = Environ("WinDir" & notepad & plik

i = 1
numFile = FreeFile
Open plik For Output As #numFile
    Do While Not IsEmpty(ThisWorkbook.Worksheets(1).Range("A" & i))
        strTemp = ThisWorkbook.Worksheets(1).Range("A" & i)
        Print #numFile, strTemp
        i = i + 1
    Loop
Close #numFile


'wyświetl plik w notatniku

i = Shell(pathNotepad, vbMaximizedFocus)

'choć notatnik wyświetla źle
'to w Excelu, po odczycie bedzie dobrze


End Sub


Sub OdczytajZTxt()
Dim numFile As Long, i As Long
Dim strTemp As String

numFile = FreeFile
Open plik For Input As #numFile
    Do While Not EOF(numFile)
        Line Input #numFile, strTemp
        i = i + 1
        MsgBox strTemp
        'zaladuj do innej komorki w celu porownania
        'ThisWorkbook.Worksheets(1).Range("B" & i) = strTemp
    Loop
Close #numFile

End Sub


I jeszcze kilka uwag:
Twój zapis: Cells(lrow,lcol) powoduje powoduje, że odczytywane są wartości z komórek aktywnego arkusza. Gdybyś przez przypadek uczynił inny arkusz aktywnym, to wiesz co by się stało...
Zawsze ustawiaj kontekst pracy!
ThisWorkbook.Worksheets(1).Cells(lrow,lcol)
Wtedy program bedzie wiedział dokładnie do których komórek konkretnie się odwołujesz. W ten sposób unikasz błędów.
Więcej o kontekście pracy i różnych sztuczkach dowiesz się z mojej książki (patrz link pod podpisem)

[Post edytowany dnia 06-11-2003 15:46 przez losmac]


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

06-11-2003 15:44
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
upadly




Typ: neutral
Postów: 7
Zarejestrowany: Nov 2003
ciag dalszy

hmm.. bardzo pomyslowe. nie jestem specjalista od basica i wiele rzeczy dla mnie to zupelna nowosc (he he)nie rozwiazuje to niestety mojego problemu. wlasnie o pliki textowe sie rozchodzi. excell bardzo ladnie kopiuje dane pomiedzy komorkami, ale zawsze do pliku textowego zwraca wartosc nieodpowiednia. poza tym wpisany tekst wloski za pomoca tego programu nadal jest zle zapisywany. dala mi jednak do myslenia opcja shell. skoro moge otworzyc notatnik to moge do niego skopiowac zawartosc schowka. mysle po prostu zautomatyzowac copy&paste. mysle tu o jakims wykorzystaniu clipboard'a. jak skoncze program zamieszcze jego zrodla.

zgadzam sie w zupelnosci z tym, iz nalezy okreslac kontekst pracy, ja zrobilem to przy wywolywaniu UserForm_Activate(). uruchmiam te funkcje przyciskiem znajdujacym sie na arkuszu i w ten sposoba zabezpieczam sie przed nieodpowiednim odniesieniem. oprocz tego znajduje sie tam zapis

with ActiveWorkbook.Worksheets("arkusz"

zle odniesienia powstaja tylko w momencie wywolywania pojedynczych modulow. cells(row,col) jest po prostu oszczedza klawiature tlumacze sie, wiem. w zupelnosci sie z Toba zgadzam i dziekuje za pomoc.

jednak nadal mnie nurtuje to zapisywanie z tabulacja. dlaczego tam mimo ustawien wielu jezykow nie daje sie zapisac odpowiednio pliow textowych? istnieje jakis sposob wpisywania danych znak po snakow za pomoca ascii bezposrednio z komorek excella? przesylam tez probke tekstu wloskiego..

06-11-2003 16:51
Pokaż profil upadly  Wyślij email do upadly   
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003
hmmm...

Chyba już wiem, na czym polega Twój problem.

Do wpisywania danych używasz UserForm i pól tekstowych...

Jak zauważyłeś, w podanym przykładzie posługiwem się bezpośrednim odczytem i zapisem danych do/z komórek Excela.

Jeśli chodzi o pola tekstowe, to one mają własne możliwości określenia czcionki i skryptu (Europa Środkowa, Zachodni, Bałtycki). W zależności od tych ustawień mogą występować błędy, o których piszesz.
Takie zachowanie, to tak jakby określenie strony kodowej. Ten sam kod ASCII może, w zależnosci od strony kodowej, oznaczać inny znak.
Jak wiesz prawidłowe wyswietlanie stron internetowych zależy od tego - jakiego kodowania znaków się użyje.

Musiałbyś zatem sprawdzić jakiej czcionki, a ściślej, jakiego skryptu używasz w danej kontrolce.
Przy zachowaniu skryptu Europa Środkowa, nie ma problemów, choć mogą wystąpić dla nietypowych znaków.


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

06-11-2003 20:53
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
upadly




Typ: neutral
Postów: 7
Zarejestrowany: Nov 2003
niestety nie w tym problem

dane wpisuje do arkuszy, a odczytuje je  bezposrednio z arkuszy excela. w przypadku zaladowania tekstu do jakiejkolwiek formy wszystko sie zgadza. dopiero gdy dane chce zapisac do pliku tekstowego dzieja sie opisane rzeczy.
jednak jezeli uzyje copy w excell'u a pozniej paste'a w notepadzie wszystko sie zgadza - znaki sa takie jakie powinny. gdy przepuszczam to przez basica znaki sa konwerowane. jak juz mowilem sprobuje zrobic cos w rodzaju takiego copy paste'a na otwartym notepadzie, moze wtedy bedzie dzialac.

07-11-2003 08:57
Pokaż profil upadly  Wyślij email do upadly   
upadly




Typ: neutral
Postów: 7
Zarejestrowany: Nov 2003
okerslanie stron kodowania przy zapisie do pliku

problem jest nie z visualem, ale z kodowaniem. najwidoczniej "print" domyslnie zapisuje do pliku uzywajac jednobajtowego kodowania ansii. kiedy zapisalem plik uzywajac unicode wszystko zapisalo sie jak nalezy. mam wiec pytanie jak okreslic kodowanie przy zapisie stringu do pliku?

problem jednak z tym, aby zapisac plik wloski korzystajac z jedno bajtowego kodowania. znak w unicode sklada sie z dwoch bajtow niestety. jednak jezeli chodzi o visuala to wszystko sprowadzac sie bedzie do dopisania funkcji ustawiajacej odpowiednie kodowanie dla konkretnego jezyka.

07-11-2003 09:58
Pokaż profil upadly  Wyślij email do upadly   
upadly




Typ: neutral
Postów: 7
Zarejestrowany: Nov 2003
co i jak

nastepujace funkcje API sa uzywane dla charsetow

GetTextCharset
GetTextCharsetInfo
IsDBCSLeadByte
IsDBCSLeadByteEx
IsTextUnicode
MultiByteToWideChar
TranslateCharsetInfo
WideCharToMultiByte

wystarczy w visualu nalezy je zadeklarowac poprzez declare function. w moim przypadku chodzilo o uzycie funkcji TranslateCharsetInfo, ktora pozwala okreslic strone kodowa oraz zestaw czcionek użytych dla wyjsciowej struktury.

05-12-2003 13:29
Pokaż profil upadly  Wyślij email do upadly   
Wszystkich odpowiedzi: 9 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1