Skocz do zawartości
  • 0

Czy da się to zrobić w Excelu?


dobrychemik

Pytanie

Przyszedł mi do głowy bardzo fajny projekt obliczeniowo-spektralno-użytkowy, ale natrafiłem na przeszkodę, której nie jestem w stanie przeskoczyć. Otóż chciałbym, aby Excel wypełnił komórkę arkusza kolorem definiowanym przez wyliczone w tym arkuszu trzy parametry RGB. Da się to zrobić wprost albo w Visual Basicu?

Dodam, że bardzo mi na tym zależy, pliz!

Odnośnik do komentarza
Udostępnij na innych stronach

23 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
9 minut temu, dobrychemik napisał:

Przyszedł mi do głowy bardzo fajny projekt obliczeniowo-spektralno-użytkowy, ale natrafiłem na przeszkodę, której nie jestem w stanie przeskoczyć. Otóż chciałbym, aby Excel wypełnił komórkę arkusza kolorem definiowanym przez wyliczone w tym arkuszu trzy parametry RGB. Da się to zrobić wprost albo w Visual Basicu?

Dodam, że bardzo mi na tym zależy, pliz!

 

Lepiej wypełnić samymi wartościami RGB a potem taki arkusz skonwertować do pliku graficznego jakimś skrypcikiem w Pythonie.

 

W ogóle polecam Pythona + numpy + matplotlib do takich rzeczy. Proste, uniwersalne, a internet jest pełen działających przykładów.

 

W numpy pewnie sprowadzałoby się to do czegoś w rodzaju "open XLS file -> saveas .PNG" i już.

 

Takie coś to nawet w godzinach pracy mogę Ci napisać :)

 

 

  • Lubię 1
  • Dziękuję 1
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

@Behlur_Olderys Bartek, byłbym Ci niezmiernie wdzięczny, gdybyś był w stanie zorganizować mi gotowe rozwiązanie, bo o "Pythonie" to ja tylko wiem, że istnieje, a o "numpach" słyszę po raz pierwszy. Całą resztą już się zajmę, bo liczyć w Excelu umiem, a mam parę pomysłów do czego taki arkusz mógłby się przydać. Jednak, żeby to było wygodne musi działać w locie - wprowadzam np. jakieś widmo do arkusza albo konkretne parametry (zależy od zastosowania) i od razu widzę efekt kolorystyczny na ekranie.

Edytowane przez dobrychemik
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Oto przykładowy kod, ustawia kolor komórek A4 i B4 na podstawie wartości RGB w komórkach A1, A2 i A3. Robi to w locie, tzn. efekt jest widoczny od razu po zmianie wartości. Brak obsługi błędów, tzn. jeżeli zamiast liczby wpiszesz np. "A" to się wysypie. Ale to tylko, jak napisałem, kod przykładowy.

 

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim red, green, blue As Integer
    Dim rgb As Long
    
    If Not Application.Intersect(Range(Cells(1, 1), Cells(3, 1)), Range(Target.Address)) Is Nothing Then
        red = Cells(1, 1).Value
        green = Cells(2, 1).Value
        blue = Cells(3, 1).Value
        rgb = blue * 65536 + green * 256 + red
        Range(Cells(4, 1), Cells(4, 2)).Interior.Color = rgb
    End If
End Sub
 

Edytowane przez MarekJ71
Poprawka kodu, wartości red i blue były zamienione miejscami.
  • Dziękuję 1
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Plik wejściowy wygląda tak:

100 0 200
50 50 200
0 100 200
0 150 150
0 200 100
50 200 50
100 200 0

 

 

Zapisujemy go jako .csv

 

Instalujemy Pythona3 + numpy + Pillow:

 

Najpierw ściągnij i zainstaluj:
https://www.python.org/downloads/

 

nastepnie z linii komend cmd

pip install Pillow
pip install numpy

 

Wtedy możesz zapisać taki plik np. jako main.py:

 

from PIL import Image
import numpy as np

my_data = np.genfromtxt('data.csv', delimiter=',')
my_data = np.array([my_data]).astype(np.uint8).transpose(1, 0, 2)
print(np.shape(my_data))
im = Image.fromarray(my_data)
im.save("your_file.png")

 

I odpalić go dwuklikiem.

Jeśli w tym samym folderze, co main.py istnieje plik "data.csv" to wynikiem jest taki pliczek:

 

your_file_x25.png

 

(przesyłam w powiększeniu x25 bo to raptem 6 pikseli...)

  • Lubię 1
  • Dziękuję 1
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
16 minut temu, MarekJ71 napisał:

Oto przykładowy kod, ustawia kolor komórek A4 i B4 na podstawie wartości RGB w komórkach A1, A2 i A3. Robi to w locie, tzn. efekt jest widoczny od razu po zmianie wartości. Brak obsługi błędów, tzn. jeżeli zamiast liczby wpiszesz np. "A" to się wysypie. Ale to tylko, jak napisałem, kod przykładowy.

 

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim red, green, blue As Integer
    Dim rgb As Long
    
    If Not Application.Intersect(Range(Cells(1, 1), Cells(3, 1)), Range(Target.Address)) Is Nothing Then
        red = Cells(1, 1).Value
        green = Cells(2, 1).Value
        blue = Cells(3, 1).Value
        rgb = red * 65536 + green * 256 + blue
        Range(Cells(4, 1), Cells(4, 2)).Interior.Color = rgb
    End If
End Sub
 

 

Dzięki! Działa :)

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Da się w Excelu

 

83061783_2021-12-0212_02_32-MicrosoftVisualBasicforApplications-ColorCols_xlsm.thumb.png.5b58994e1553d2ddd9bae3fa8d689f5f.png

 

Aczkolwiek zastanawiam się po co używać tego programu do dodawania kolumn dla domorosłych księgowych. To nędza, naucz się programować w czymkolwiek, to będziesz mógł literalnie sformatować wszystko. Ja większość swoich rysunków programuje. Zajechałbym się robić to w GIMP-ie. To dla lamusów.

 

Sub ColorColsBCD()
      Dim x As Integer
      Application.ScreenUpdating = False
      ' count rows
      nRow = Range("B2", Range("B2").End(xlDown)).Rows.Count - 1
      ' Select b2.
      Range("B2").Select
      ' Establish "For" loop to loop till "endrow" number of times.
      For x = 0 To nRow
        R = ActiveCell.Offset(x, 0)
        G = ActiveCell.Offset(x, 1)
        B = ActiveCell.Offset(x, 2)
        For k = 0 To 2
         ActiveCell.Offset(x, k).Interior.Color = RGB(R, G, B)
         ActiveCell.Offset(x, k).Font.Color = IIf(0.3 * R + 0.6 * G + 0.1 * B > 128, _
                                                           RGB(0, 0, 0), RGB(255, 255, 255))
        Next
      Next
      Range("A1").Select
      Application.ScreenUpdating = True
End Sub

 

Astropolis nie podświetla VBA. Zeszyt w załączniku.

PS. Mam bardzo starą wersję chyba z liceum. Może z poprzedniego tysiąclecia. Ale powinno działać :)

ColorCols.xlsm

  • Lubię 1
  • Dziękuję 1
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Tylko popraw formułę na obliczanie rgb, tak jak w moim poście wyżej po edycji. Powinno być:

rgb = blue * 65536 + green * 256 + red

Albo jeszcze lepiej, tak jak w kodzie Przemka, zastosować funkcję RGB(), tylko wtedy musisz zmienić nazwę zmiennej rgb na coś innego albo zmienić kod tak żeby w ogóle nie była potrzebna.

Bez tej zmiany 'blue' tak naprawdę oznacza czerwony, a 'red' oznacza niebieski.

Jeżeli potrzebujesz żeby rozbudować kod o kontrolę poprawności danych czy obsługę błędów, daj znać.

Edytowane przez MarekJ71
  • Dziękuję 1
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

@dobrychemik dodałem też linię kodu, która robi tekst białym jeśli Lumi < 0.5, a czarnym jeśli odwrotnie :) żeby napisy nie znikały, jeśli np. nie chcesz by napisy były widoczne, to odwróc nierównosc, wtedy będą ciemne litery na ciemnym, a jasne na jasnym, albo nawet możesz dać taki sam kolor jak tła (kopiując to co wyżej), wtedy napisy nie beda widoczne w kolumnach, tylko w wierszu edycji nad skoroszytem :)

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Przemek, dzięki, ale nie trzeba z tymi napisami. Chodzi mi tylko na natychmiastowe wyświetlenie odpowiednio dużego kawałka ekranu o zadanym, jednolitym kolorze. Wszelkie konieczne napisy mogę mieć gdzie indziej w domyślnym kolorze.

Ogólnie już dawno chciałem zrobić program na potrzeby dydaktyki, który by na podstawie widma wyświetlał jaki kolor będzie miał dany związek w roztworze. Ponieważ mam oprogramowanie i umiejętności potrzebne do symulacji struktury i widm związków organicznych, to taki dodatkowy "wizualizer" będzie to fajnym uzupełnieniem. A przy okazji to samo narzędzie może się przydać w zabawie z filtrami. Po skalibrowaniu sobie modelu z własnym monitorem przy użyciu kilku filtrów i ich widm powinienem mieć możliwość bardzo szybkiej wzrokowej oceny pasma transmisji filtra. 

 

Excel jest dla lamusów? A niech będzie, że jestem lamusem. Lubię Excela i już. Mam swoje lata i nie mam głowy ani czasu na uczenia się wszystkiego.

  • Lubię 1
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
3 godziny temu, dobrychemik napisał:

Excel jest dla lamusów? A niech będzie, że jestem lamusem. Lubię Excela i już. Mam swoje lata i nie mam głowy ani czasu na uczenia się wszystkiego.

Szanuję. No tak. Excel robi szablonowe tabelki i ma funkcje do wbijania półklikajaco. Niewiele oferuje, wielki pakiet, jeszcze nie za darmo. Niewielkim kosztem gdziekolwiek uzyskasz lepszy efekt. Prezentowanie wykresu z widma, cokolwiek. Numpy, Matlab (lub darmowe alternatywy). Wydaje mi się, że to nie jest dużo nauki, nawet w Twoim wieku jeszcze by się zwróciło przed końcem :P Ja wszystkie napisy, opisy, kolory, rysunki zwykle robię jakoś "programistycznie", później szkoda mi czasu zmieniać wszystkiego na nowo jak zmienie jedną daną. Kolumny i kolorki Excel ogarnie... zgoda :D Ale wiem ile robisz ciekawych analiz itd. Ja np. dane od Ciebie wtórnie wyrzuciłem z excela do pliku tekstowego, a pozniej wczytałem binarnie i dopiero moglem na nich robić co chce w dowolnym narzędziu. Np czas spędzony w tym wątku uwazam, ze lepiej np. poświęcic na czytanie co pisał @Behlur_Olderys i zrobić kroczek w strony Py, a np. olać to co ja zrobilem (zajęlo mi 10 minut, i tak, moje olać, a zobaczyć, czy krok w strone Numpy Cię nie zachęci :) )

 

3 godziny temu, dobrychemik napisał:

Excel jest dla lamusów? A niech będzie, że jestem lamusem. Lubię Excela i już. Mam swoje lata i nie mam głowy ani czasu na uczenia się wszystkiego.

poza tym napisałem raczej że przerabianie rysunków non stop w gimpie a nie wypluwanie ich wprost ze swojego programu jest dla lamusów. Excel jest dla księgowych (i to też tylko do niektórych zastosowań) :D 

 

referencje:

 

4 godziny temu, Przemek Majewski napisał:

.... tego programu do dodawania kolumn dla domorosłych księgowych. To nędza, naucz się programować w czymkolwiek, to będziesz mógł literalnie sformatować wszystko.

 

4 godziny temu, Przemek Majewski napisał:

 

Ja większość swoich rysunków programuje. Zajechałbym się robić to w GIMP-ie. To dla lamusów.

 

 

I żeby mnie nie posądzić znowu o marudzenie, mowa o np. takim rysunku:
ParabF8Summary.thumb.png.3356fc000580cc6bd77ccb2085939b58.png

 

Napisałem program, który symuluje teleskopy i zwierciadła, i odbicia od nich, a dodatkowo taki, który wypluwa kolaże spot diagramów. Umarłbym łączyć to z cegiełek. Np. Wiem, że masz spory bgd komputerowy, ale oczywiście nie namawiam juz bardziej :)

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
2 godziny temu, Behlur_Olderys napisał:

....W ogóle polecam Pythona + numpy + matplotlib do takich rzeczy. Proste, uniwersalne, a internet jest pełen działających przykładów...

A jak się do tego zabrać? Chciałbym się nauczyć, ale mam opory psychologiczne, jak się przełamie to już poleci. Mam spore doświadczenie z excelem (ale VBA podstwy tylko), wizualizacją danych w Tableau i w miarę ogarniam bazy danych BI. Na naukę przy dobrych wiatrach mogę poświecić 8h tygodniowo + wykorzystanie w pracy które będzie ciągle wzrastało.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

@cwic

Zainstaluj Python3 z linku, który podałem.

Dodatkowo PyCharm IDE (jedyne słuszne)
https://www.jetbrains.com/pycharm/download/#section=windows
(wersja Community darmowa)

Tworzysz nowy projekt -i już możesz zacząć się bawić.

Dowolny problem sformułowany po angielsku można załatwić przez Google. Albo do mnie napisać :)
Jest nawet możliwość bez żadnego instalowania pobawić się Pythonem w przeglądarce:

https://ideone.com/
Wybierz Python3 i można już pisać. Numpy raczej tam nie zagra, wiadomo, ale podstawy można poćwiczyć.

Numpy ma świetną dokumentację + dla leniwych: wpisujesz "numpy how to open .csv file" i też znajdziesz odpowiedź na Stack Overflow.

 

Jak brakuje jakiejś biblioteki - otwierasz cmd i wpisujesz "pip install cokolwiek" i Ci instaluje. Bajka (w porównaniu np. do bibliotek w C/C++)

 

Chyba żaden język nie ma mniejszego progu wejścia...

  • Lubię 3
  • Dziękuję 1
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Przyglądnij się czemuś takiemu jak formatowanie warunkowe. Prawdopodobnie nie wystarczy użyć zdefiniowanych tam szablonów tylko trzeba będzie użyć własnych formuł, ale być może udałoby się wtedy uniknąć Visual Basica. Jak coś to daj znać 

Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Odpowiedz na pytanie...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.