Avatar billede Slettet bruger
30. oktober 2014 - 11:46 Der er 16 kommentarer og
1 løsning

Splitte komma seperated data ud i excel

Hejsa,

Jeg har en CSV fil hvor i jeg har disse linier fx:

navn,tid,dato

Problembet er når jeg læser mine linier i CSV filen og indsætter det i excel, så rammer hele linien i A1

Hvordan kan jeg få Navn til at ramme A1, tid A2,dato A3?

Jeg har forsøgt mig med nogle lister, while og foreach, men synes ikke lige jeg kan hitte ud af det.

List<string> csvlines = new List<string>();
        List<string> lists = new List<string>();

     


        try
        {
            using (StreamReader sr = new StreamReader(@"C:\Users\" + username + "\\Desktop\\TimeTracking.txt"))
            {
                string currentLine;
             
                while ((currentLine = sr.ReadLine()) != null)
                {
                    csvlines.Add(currentLine);
                 
                    foreach (string split in csvlines)
                    {
                        lists = currentLine.Split(',').ToList();

                        foreach (string splittedstring in lists)
                        {

                        }
                    }
Avatar billede sonalias Seniormester
30. oktober 2014 - 11:53 #1
du behøver slet ikke sådan noget voldsomt noget, problemet ligger i at du har en dansk windows / Excel der ikke forstår , som seperator men forventer et semikolon, så du kan enten bytte alle komma ud med semikolon eller du kan tilføje følgende på første linje i din csv fil:
sep=,
Avatar billede Slettet bruger
30. oktober 2014 - 12:04 #2
Jeg får desværre bare det samme ud. Det hele i en celle.

Min excelkode ser sådan her ud

var workbook = new XLWorkbook();
        var worksheet = workbook.Worksheets.Add("Time");

        worksheet.Cell(1, 1).Value = "TaskName";
        worksheet.Cell(1, 2).Value = "SpentTime";
        worksheet.Cell(1, 3).Value = "Date";

        var rangeWithList = worksheet.Cell(2, 1).InsertData(csvlines);

        workbook.SaveAs("C:\\Users\\"+username+"\\Desktop\\Timeregistration.xlsx");
Avatar billede sonalias Seniormester
30. oktober 2014 - 12:17 #3
Hvad sker der hvis din fil ser som du som følger du du bare åbner det almindeligt i Excel? Så vil den åbne som du forventer, forstår ikke helt hvorfor du vil bruge VBA kode til at åbne en csv fil?

sep=,
navn,tid,dato
navn,tid,dato
....
....
Avatar billede supertekst Ekspert
30. oktober 2014 - 12:37 #4
VBA :
Option Explicit
Dim antalRækker As Integer, tabel As Variant, ræk As Integer, ix As Integer
Public Sub opsplit()  'fordeler indhold i kolonne A til højre
    antalRækker = ActiveCell.SpecialCells(xlLastCell).Row
   
    For ræk = 1 To antalRækker
        tabel = Split(Range("A" & ræk), ",")
       
        For ix = 0 To UBound(tabel)
            Range("B" & ræk).Offset(0, ix) = tabel(ix)
        Next ix
    Next ræk
End Sub
Avatar billede Slettet bruger
30. oktober 2014 - 12:43 #5
det er ikke VBA? Men derhen ad, men er noget der er lavet til C#

Det er en reference der hedder ClosedXML

https://closedxml.codeplex.com/
Avatar billede Slettet bruger
30. oktober 2014 - 12:43 #6
det er ikke VBA? Men derhen ad, men er noget der er lavet til C#

Det er en reference der hedder ClosedXML

https://closedxml.codeplex.com/
Avatar billede Slettet bruger
30. oktober 2014 - 12:43 #7
Tak for svaret,men jeg skal ikke bruge VBA i mit C# projekt.
Avatar billede sonalias Seniormester
30. oktober 2014 - 12:57 #8
Jeg forstår slet ikke dit problem, vil du gerne have et svar på hvordan din C# kode skal se ud eller vil du have Excel til at åbne en csv fil korrekt??? ved at angive seperator kan den altså godt åbne det som forventet
Avatar billede Slettet bruger
30. oktober 2014 - 13:03 #9
Jeg vil have svar på hvordan jeg får den til at smide mine CSV linier over i excel, hvor det er delimited.

Jeg kan ikke få den til at delimit det hvis jeg skriver sep=; eller ,

Så hvordan skal koden se ud hvis du siger seperator virker?

Jeg kan lige paste hele min kode.


public void Button_Click(object sender, RoutedEventArgs e)
    {
        List<string> csvlines = new List<string>();
        List<string> lists = new List<string>();

        try
        {
            using (StreamReader sr = new StreamReader(@"C:\Users\" + username + "\\Desktop\\TimeTracking.txt"))
            {
                string currentLine;
       
                while ((currentLine = sr.ReadLine()) != null)
                {
                    csvlines.Add(currentLine);
                 
                }
            }
        }

        catch(Exception ee)
        {
            System.Windows.MessageBox.Show(ee.Message);
        }

        var workbook = new XLWorkbook();
        var worksheet = workbook.Worksheets.Add("Time");

        worksheet.Cell(1, 1).Value = "TaskName";
        worksheet.Cell(1, 2).Value = "SpentTime";
        worksheet.Cell(1, 3).Value = "Date";

        var rangeWithList = worksheet.Cell(2, 1).InsertData(csvlines);

        workbook.SaveAs("C:\\Users\\"+username+"\\Desktop\\Timeregistration.xlsx");
    }

Som du kan se nederst indsætter jeg min liste med linier men selvom jeg manuelt har tilføjet sep=; i første linie i TXT dokumentet så sker der intet.
Avatar billede Slettet bruger
30. oktober 2014 - 13:07 #10
Hvis jeg åbner filen direkte i Excel så har den delimited sig selv.
Avatar billede sonalias Seniormester
30. oktober 2014 - 13:10 #11
ahhhhhh, du gemmer det hele i en xlsx fil, den kender ikke til komma seperering, prøv lige at gem som .csv istedet
Avatar billede Slettet bruger
30. oktober 2014 - 13:12 #12
Ahead of you :=) Har lige prøvet at gemme den som CSV. Men med samme resultat - bortset fra hvis man åbner filen direkte, så kan excel selv finde ud af at delimit den.

Men hvis jeg åbner excel filen efter har indsat, står det hele stadig på samme linie.
Avatar billede sonalias Seniormester
30. oktober 2014 - 13:17 #13
Drop hele din worksheet konvertering og hold dig til strenge, det andet giver bare bøvl hvis du alligevel ikke skal bruge nogle af funtionerne fra regnearket
Avatar billede Slettet bruger
30. oktober 2014 - 13:22 #14
Såååh hvordan ville du kode det? :)
Avatar billede sonalias Seniormester
30. oktober 2014 - 13:40 #15
Bare gem hele listen som din csv fil uden at konvertere til xls, altså drop følgende og gem csv listen

var workbook = new XLWorkbook();
        var worksheet = workbook.Worksheets.Add("Time");

        worksheet.Cell(1, 1).Value = "TaskName";
        worksheet.Cell(1, 2).Value = "SpentTime";
        worksheet.Cell(1, 3).Value = "Date";

        var rangeWithList = worksheet.Cell(2, 1).InsertData(csvlines);
Avatar billede Slettet bruger
30. oktober 2014 - 14:04 #16
true men så ryger ideen med at ligge det i excel måske lidt af. Men man åbner måske også bare CSV filer direkte i excel nu om dage.

Så jeg burde bare lave en knap som åbner excel med den pågældende CSV fil i stedet.

Lig et svar:) Tak for hjælpen
Avatar billede sonalias Seniormester
30. oktober 2014 - 14:14 #17
xlsx formatet er ihvertfald noget rod hvis du ikke skal bruge funktionerne, så er csv til at forstå, håber du fik det til at fungere nogenlunde som tiltænkt :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester