WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   C# och Excel (https://www.wn.se/forum/showthread.php?t=1056702)

yakuzaemme 2013-02-03 19:44

C# och Excel
 
Sitter och pillar lite på ett program som ska underlätta lite när man skriver ut adressfiler.

Jag har en excel-fil med olika fält, ink. postnummer. Det jag skulle vilja göra är att på den sista raden för varje unikt postnummer, ändra fältet och lägga till en stjärna.

Så exempelvis:

Citat:

72133
72133
72133*
72134
72334*
72555
72555
72555
72555
72555*
.... ni förstår säkert ;)

Har inte mycket erfarenhet inom Excel. Jag antar(?) att jag måste göra detta i utvecklingsmiljö som C#, att exempelvis läsa in alla värden, modifiera för att sedan generera en ny Excel-fil.

Tänker jag knasigt eller är detta the way to go?

goose 2013-02-03 19:58

Du kan annars skriva ett macro i excel som du exekverar på din data, så slipper du gå vägen via .net.

yakuzaemme 2013-02-03 20:01

Japp, läser på om det nu faktiskt, dock verkar jag inte kunna hitta någon hjälp, det jag vill åstakomma verkar inte vara så populärt :D

Någon som är mer hemma på Excel får gärna hjälpa till

digiArt 2013-02-03 22:05

Använd en if-sats, kolla om nästkommande skiljer sig, sätt i så fall en stjärna. Sen kan du slå ihop kolumner, alt. Sammanfoga text med stjärna.

Googla if och excel (eller OM och excel om du kör svenska)

aelander 2013-02-04 00:25

Två sätt, finns kanske fler bra eller bättre.

FÖRSTA SÄTTET är att använda sig av villkorsstyrd formatering

-1-
Välj Arkiv - Alternativ - Formler. Sätt i bock för R1C1-referenser .. OK

-2-
Markera dina postnummer

-3-
I fliken start (den man vanligtvis finns i) väljer du
'Villkorsstyrd formatering'
Välj 'Hantera regler' lägst ner

I dialogrutan väljer du 'Ny regel'
I Välj regeltyp väljer du 'Bestäm vilka celler som ska formateras genom att använda en formel'
I fältet under 'Formatera värden där den här formeln är sann:' skriver du
=om(RC<>R[+1]C;1;0)


Klicka på 'format' - välj 'Anpassat' och där det nu står 'Standard' skriver du istället 00000\*
Du kan även välja att skriva 000\ 00\*

och så OK OK OK

Om du valde format 000\ 00\* så välj Crtl+1 och välj Tal - Kategori - Postnummer
så blir postnumrens utseende som vi brukar se dem (Svenska postnr)

-4-
Kan se lite konstigt ut med justeringen. Du kan t ex vänsterjustera hela kolumnen.
Går att lösa så att du får lämplig stor 'padding' till vänster. Hör av dig om det är aktuellt

-5-
Nu kan du ta bort bocken som du satte i enligt punkt 1




ANDRA SÄTTET är att infoga en kolumn till höger som dina postnr och sätta * där.

-1-
Välj Arkiv - Alternativ - Formler. Sätt i bock för R1C1-referenser .. OK

-2-
Infoga en kolumn till höger om postnummerkolumnen

-3-
Skriv formeln
=OM(RC[-1]<>R[1]C[-1];"*";"")
i den infogade kolumnen. På alla rader där det finns postnr.

-4-
Nu kan du ta bort bocken som du satte i enligt punkt 1

Klart!


Anledningen till att göra detta
Välj Arkiv - Alternativ - Formler. Sätt i bock för R1C1-referenser .. OK
är att jag inte vet var dina postnr finns i ditt kalkylblad och alltså inte kan skriva rätt formler då.


Lycka till! Hör av gärna av dig om det fungerade som du ville.

Conny Westh 2013-02-04 01:16

Det är ett ganska enkelt problem i Excel:

Om du har dina värden i kolumnen A med början på rad 6 så kan du lägga in följande formel i CELL B6 =OM(A6=A7;A6;SAMMANFOGA(A6;"*"))

Sen kopierar du den formeln neråt så ska du få precis vad jag tror du vill ha.

Du har dock en bugg i din specifikation på rad 4, somjag tror du skrivit fel för där får jag en asterisk men det har du inte med i ditt krav.

yakuzaemme 2013-02-04 01:20

Väl förklarat aelander!
Conny, jag förstår inte hur du menar. Måste jag köra den formeln på alla rader, eller?

Jag har iaf gjort en lösning i C#, som läser av alla rader, hittar samband (x,y != x,y+1) och sätter en stjärna.

Ska finslipa lite och göra lite mer automatik så ska vi se hur det blir. Kan slänga upp det här också. Tanken är att detta ska spara tid, då det ska användas 15-20 gånger per dag, i stora Excel-filer.

Conny Westh 2013-02-04 01:33

Här kommer ett VBA-Makro som du kan lägga in i din VBA-modul om du hellre föredrar det sättet:

Första parametern motsvarar cell A6 och andra parametern motsvarar cell A7 och tredje parametern är valfri sträng m du vill visa i slutet av postnummret. Jag har lagt upp detta som strängvärden men det funkar lika bra om du använder talvärden enligt mina preliminära tester.


Kod:

function AddCharAtEnd(FirstValue as String, CompareToValue as String, StringToAdd as String) as string
        if (FirstValue<>CompareToValue) then
                AddCharAtEnd = FirstValue & StringToAdd
        else
                AddCharAtEnd = FirstValue
        endif
end function


Anropet till makrot i cell B6 kommer att se ut så här:
Kod:

=AddCharAtEnd(A6;A7;"*")
Kopiera denna cell neråt så mycket du behöver så får du rätt resultat.

Conny Westh 2013-02-04 01:40

Citat:

Ursprungligen postat av yakuzaemme (Inlägg 20461666)
Väl förklarat aelander!
Conny, jag förstår inte hur du menar. Måste jag köra den formeln på alla rader, eller?

Jag har iaf gjort en lösning i C#, som läser av alla rader, hittar samband (x,y != x,y+1) och sätter en stjärna.

Ska finslipa lite och göra lite mer automatik så ska vi se hur det blir. Kan slänga upp det här också. Tanken är att detta ska spara tid, då det ska användas 15-20 gånger per dag, i stora Excel-filer.

I de lösningar jag redovisat så förändras inte originalvärdet utan du lägger det i en egen kolumn. Jag brukar aldrig förändra originalkvärdet för om det går åt skogen så vill jag enkelt kunna ändra formeln och sedan köra om resultatet.

I mina exempel så har jag förutsatt att du börjar med att lägga in dina postnr i cell A6 och sedan går neråt till A7, A8 osv...

Både min första formel och min andra formel kan du lägga i B6 och sedan kopiera den neråt så kommer referenserna till A6 och A7 att justeras så de blir rätt.

Då får du en stjärna i den sista förekomsten av varje postnr i kolumnen B, men kolumn A är oförändrad.

yakuzaemme 2013-02-04 10:08

Kanske jag som är lite trög när det kommer till Excel, men med din kod Conny så måste man skriva in fälten manuellt, och dessutom köra den flera gånger? Tanken är ju somsagt att spara tid, att snabbt köra ett skript som modifierar kolumnerna för att spara och skicka till produktion. Inga extra fält ska läggas till, utan dessa Excel skickas sedan till maskin för att bli utskrivna som adresser, sådana som sätts på reklam osv. Olika brevbärare har olika postnummer, så därför brukar man lägga dessa i olika buntar, och markera den sista med stjärnor så den som packar in detta i lådor innan det når Posten gör det till separata buntar.

Conny Westh 2013-02-04 11:07

Man behöver bara skriva iformeln en gång, sen när man kopierar cellen till de övriga raderna så ändras refernserna automatiskt (jag använder OpenOffice Calc nu och jag brukar göa samma sak i Excel och det funkar likadant)

Sen när du fått en extra kolumn som du vill ha den så "Special-kopierar" du den i excel och klistrar in "värden" i originalkolumnen så kommer inte formler utan nya värden att ligga i din originalkolumn med asterisk på rätt ställe. Sen tar du bort den extra kolumnen och sen är det hela klart.

Jag använder detta arbetssätt hela tiden så för mig går det på 3 råda sekunder att göra...

yakuzaemme 2013-02-04 13:43

Okej, har missförstått vad jag ska göra. Att sätta en stjärna vid varje nytt postnummer är klart, men det var inte det som var problemet tydligen (suck)..

Anyways. Jag har en .dbf fil som är genererad av ett program som fixar stjärnorna, och gör det korrekt (beroende på postnummer, stad osv osv, tydligen mycket komplext).

Problemet nu är att jag vill öppna denna .dbf fil i Excel, och ha rätt teckenuppsättning, åäö visas nämligen inte korrekt. Jag kan döpa om denna till .txt för att öppna i Excel exempelvis, men textuppsättningen blir fel.

Någon kunnig som vet hur man ändrar detta i Excel? Kanske ska man skriva ett VBA skript som söker igenom alla kolumner och ersätter tecken-kod x med y.

Om jag döper om .dbf filen till .txt och öppnar i Notepad, så ser jag äåö. Öppnar jag dock denna i Excel blir det knasigt.

Här är en bild:
http://gyazo.com/b408af4d4cd1efe514804cc4fa91bb0e

Om det hjälper:
Å å = ┼ Õ
Ä ä = ─ õ
Ö ö = Í ÷


Som man ser så är teckenkodningen knasig. Går det att lösa? Förstår att det går att lösa genom att ersätta ett tecken med ett annat, men om det är på andra språk? Det bästa vore ju att fixa rätt tecken-encoding.

yakuzaemme 2013-02-04 17:37

Det jag gör är alltså detta:

Döper om .dbf till txt - Denna ser bra ut i Notepad, med äåö
Öppnar denna i Excel (File>Open) - Och nu har den konstiga tecken

Jag testade att använda 'DBF to XLS Converter' vilket gjorde jobbet, dock kostar det och känns som det borde finnas enklare lösning när det bara handlar om teckenuppsättning.

Conny Westh 2013-02-04 23:56

Citat:

Ursprungligen postat av yakuzaemme (Inlägg 20461759)
Det jag gör är alltså detta:

Döper om .dbf till txt - Denna ser bra ut i Notepad, med äåö
Öppnar denna i Excel (File>Open) - Och nu har den konstiga tecken

Jag testade att använda 'DBF to XLS Converter' vilket gjorde jobbet, dock kostar det och känns som det borde finnas enklare lösning när det bara handlar om teckenuppsättning.

Det finns en inbyggd teckenkonvertering i .NET som du kan använda.

Men jag tycker du bygger din lösning alldeles för komplex, både jag och aelander har bidragit med sammanlagt 3 lösningar som är betydligt enklare och som fungerar redan nu utan externa tredjepartsbibliotek.

yakuzaemme 2013-02-05 07:13

Citat:

Ursprungligen postat av ConnyWesth (Inlägg 20461781)
Det finns en inbyggd teckenkonvertering i .NET som du kan använda.

Men jag tycker du bygger din lösning alldeles för komplex, både jag och aelander har bidragit med sammanlagt 3 lösningar som är betydligt enklare och som fungerar redan nu utan externa tredjepartsbibliotek.

Nej Conny, då jag misuppfattade uppgiften. Visst ska den lägga till en stjärna vid olika postnummer, men det är bara när det går över till ett postnummer en annan brevbärare har, och en postnummerdatabas sitter jag inte på. Företaget sköter detta via ett program som heter PostSort, som skapar en dbf-fil.

Slutade med att jag köpte DBF2XLS, verkar fungera bra..

Conny Westh 2013-02-06 00:21

Citat:

Ursprungligen postat av yakuzaemme (Inlägg 20461789)
Nej Conny, då jag misuppfattade uppgiften. Visst ska den lägga till en stjärna vid olika postnummer, men det är bara när det går över till ett postnummer en annan brevbärare har, och en postnummerdatabas sitter jag inte på. Företaget sköter detta via ett program som heter PostSort, som skapar en dbf-fil.

Slutade med att jag köpte DBF2XLS, verkar fungera bra..

Ok, det var ju nya krav då.

Har du tillgång till innehållet i DBF-filen så du kan länka in den i en anna flik i Excel så kan man göra en upslagning där?


Alla tider är GMT +2. Klockan är nu 12:51.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson