![]() |
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:
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? |
Du kan annars skriva ett macro i excel som du exekverar på din data, så slipper du gå vägen via .net.
|
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 |
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) |
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. |
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. |
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. |
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 Anropet till makrot i cell B6 kommer att se ut så här: Kod:
=AddCharAtEnd(A6;A7;"*") |
Citat:
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. |
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.
|
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... |
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. |
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. |
Citat:
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. |
Citat:
Slutade med att jag köpte DBF2XLS, verkar fungera bra.. |
Citat:
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