Jump to content
  • 0

Czy da się to zrobić w Excelu?


dobrychemik
 Share

Question

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!

Link to comment
Share on other sites

23 answers to this question

Recommended Posts

  • 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ć :)

 

 

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

  • 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.

Edited by dobrychemik
Link to comment
Share on other sites

  • 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
 

Edited by MarekJ71
Poprawka kodu, wartości red i blue były zamienione miejscami.
  • Thanks 1
Link to comment
Share on other sites

  • 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...)

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

  • 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 :)

 

Link to comment
Share on other sites

  • 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

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

  • 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ć.

Edited by MarekJ71
  • Thanks 1
Link to comment
Share on other sites

  • 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 :)

 

Link to comment
Share on other sites

  • 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.

  • Like 1
Link to comment
Share on other sites

  • 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 :)

Link to comment
Share on other sites

  • 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.

Link to comment
Share on other sites

  • 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...

  • Like 3
  • Thanks 1
Link to comment
Share on other sites

  • 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ć 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Our picks

    • Migracja Astropolis na nowy serwer - opinie
      Kilka dni temu mogliście przeczytać komunikat o wyłączeniu forum na dobę, co miało związek z migracją na nowy serwer. Tym razem nie przenosiłem Astropolis na większy i szybszy serwer - celem była redukcja dosyć wysokich kosztów (ok 17 tys rocznie za dedykowany serwer z administracją). Biorąc pod uwagę fakt, że płacę z własnej kieszeni, a forum jest organizacją w 100% non profit (nie przynosi żadnego dochodu), nie znalazłem w sobie uzasadnienia na dalsze akceptowanie tych kosztów.
        • Thanks
        • Like
      • 44 replies
    • Droga Mleczna w dwóch gigapikselach
      Zdjęcie jest mozaiką 110 kadrów, każdy po 4 minuty ekspozycji na ISO 400. Wykorzystałem dwa teleskopy Takahashi Epsilon 130D i dwa aparaty Nikon D810A zamocowane na montażu Losmandy G11 wynajętym na miejscu. Teleskopy były ustawione względem siebie pod lekkim kątem, aby umożliwić fotografowanie dwóch fragmentów mozaiki za jednym razem.
        • Love
        • Thanks
        • Like
      • 48 replies
    • Przelot ISS z ogniskowej 2350 mm
      Cześć, po kilku podejściach w końcu udało mi się odpowiednio przygotować cały sprzęt i nadążyć za ISS bez stracenia jej ani razu z pola widzenia. Wykorzystałem do tego montaż Rainbow RST-135, który posiada sprzętową możliwość śledzenia satelitów.
      Celestron Edge 9,25" + ZWO ASI183MM. Czas ekspozycji 6 ms na klatkę, końcowy film składa się z grup 40 klatek stackowanych, wyostrzanych i powiększonych 250%.
      W przyszłości chciałbym wrócić do tematu z kamerką ASI174MM, która z barlowem 2x da mi podobną skalę, ale 5-6 razy większą liczbę klatek na sekundę.
      Poniżej film z przelotu, na dole najlepsza klatka.
        • Love
        • Thanks
        • Like
      • 72 replies
    • Big Bang remnant - Ursa Major Arc or UMa Arc
      Tytuł nieco przekorny bo nie chodzi tu oczywiście o Wielki Wybuch ale ... zacznijmy od początku.
       
      W roku 1997 Peter McCullough używając eksperymentalnej kamery nagrał w paśmie Ha długą na 2 stopnie prostą linie przecinajacą niebo.
       
      Peter McCullough na konferencji pokazał fotografię Robertowi Benjamin i obaj byli pod wrażeniem - padło nawet stwierdzenie: “In astronomy, you never see perfectly straight lines in the sky,”
        • Love
        • Thanks
        • Like
      • 16 replies
    • Jeśli coś jest głupie, ale działa, to nie jest głupie - o nietypowych rozwiązaniach sprzętowych
      Sformułowanie, które można znaleźć w internetach jako jedno z "praw Murphy'ego" przyszło mi na myśl, gdy kolejny raz przeglądałem zdjęcia na telefonie z ostatniego zlotu, mając z tyłu głowy najgłośniejszy marsjański temat na forum. Do rzeczy - jakie macie (bardzo) nietypowe patenty na usprawnienie sprzętu astronomicznego bądź jakieś kreatywne improwizacje w razie awarii czy niezabrania jakiegoś elementu sprzętu  Obstawiam, że @HAMAL mógłby samodzielnie wypełnić treścią taki wątek.
        • Haha
        • Like
      • 43 replies
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.