Sınırlandırılmış bir listeyi excel'deki multicolumn tablosuna nasıl dönüştürebilirim?


3

Bunun gibi bir listem var:

Friut;Taste;Color;Other;Apple;Good;Red and Blue;1;Orange;Really Good;Orange;12

Her 4 sınırlamayı seçip bunları şöyle satırlara çevirerek dönüştürmek istiyorum:

Fruit    Taste     Color     Other
Apple    Good      Red and G.1
Orange   Really Go.Orange    12

Libreoffice (tercih edilen), Openoffice veya Excel ile bu nasıl mümkün olabilir?

Düzenleme: Yukarıdaki bir örnek. 4 sınırlama seçmek için kullanıyorum, ancak üzerinde çalışmam gereken 500 satır var.

Edit2: Kendi cevabımı verdim (doğru)


2
Bunu Perl veya sed gibi bir şeyle yapmak daha kolay olurdu. echo "Your string" | perl -pe 's/([^;]*);([^;]*);([^;]*);([^;]*);?/$1,$2,$3,$4\n/g've sonucu CSV olarak içe aktarın. Gerçekten LO / OO / Excel kullanan ve başka bir şey kullanan bir çözüme mi ihtiyacınız var?
user49740

Şimdi onu dinleme şekliniz, her meyvenin bir sıra olması, karakter ayrılmış dosyalara gelince ...
Austin T French

Gerçekten Perl'i tanımıyorum ve bu da bilmediğim bir regex dizgisine benziyor. Bu gerçekten harika, bunu belge üzerinde deneyeceğim. Bunu newline ile de çalışmanın bir yolu var mı?
stonewareslord

Lütfen "bunu newline ile çalışmasını sağlayın" açıklayın. Sorunuzu bir örnekle güncelleyin. Ayrıca, Perl ve regex'leri öğrenmelisin, metinle ilgilenmekte çok yardımcı oluyorlar.
user49740

2
Dene sed -re 's/([^;]*);([^;]*);([^;]*);([^;]*);?/\1,\2,\3,\4\n/g' file.txt. Yani -rönemli olduğunu ve $1, $2,...olan \1, \2,...sed sözdiziminde.
user49740 24:13

Yanıtlar:


1

Tüm satırları birden çok satıra bölmek için VBA makrosu

görüntü tanımını buraya girin

Bu makro ile tüm satırları çoklu satıra bölersiniz. Bölme işleminden sonra istediğiniz sütunu seçebilirsiniz. sadece iSplitilk satırın değerini değiştir . Belirli bir sınırlayıcı kullanmıyorum, yalnızca sütun sayısı.

Her adımı yorumladım. Makroyu kişisel ihtiyaçlarınıza göre ayarlamak kolaydır.

  1. Excel ve VBA editörünü Alt+ ile açınF11
  2. Sol bölmede, kodu verilerinizin yerleştirildiği sayfanın altına yapıştırın
  3. İlk iki satırı ihtiyaçlarınıza göre değiştirin
  4. Makroyu ile çalıştır F5

Const iSplit = 4    '## how many columns do you want after splitting

Sub transposeColumn()
    '## search the last row to know how many rows we have to iterate through
    iLastRow = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row

    '## begin to loop through every row. Begin at last row and go upwards
    For r = iLastRow To 1 Step -1

        '## search the last column in the current row
        iLastCol = Rows(r).Find("*", Cells(r, 1), , , xlByColumns, xlPrevious).Column

        '## calculate how many new rows we need to insert for this row
        iNewRows = WorksheetFunction.RoundUp(iLastCol / iSplit, 0) - 1

        '## begin to copy and insert new rows, one by one
        For c = 1 To iNewRows

            '## insert a new blank line where we can copy values to
            Rows(r + c).Insert Shift:=xlDown

            '## set the source range for easier access later
            Set rngSrc = Range(Cells(r, iSplit * c + 1), Cells(r, iSplit * c + iSplit))

            '## copy and paste the range
            rngSrc.Copy Destination:=Cells(r + c, 1)

            '## clear all cells which we have just copied
            rngSrc.Clear
        Next c
    Next r
End Sub

0

Liste bir metin dosyasıysa, Excel'deki Metin Alma Sihirbazı'nı kullanabilirsiniz . Hem LibreOffice hem de Openoffice.org'da benzer bir araç olduğunu varsayıyorum.

Ancak, sınırlayıcılar ;işaretler olduğundan, içe aktardığınızda, verileri bir değerler satırı olarak içe aktarılacak şekilde düzenlemeye ihtiyaç duyulur. Orijinal metin dosyasını değiştirebilir ve bir sonraki satırı belirten başka bir sınırlayıcı ekleyebilirsiniz.


Bence stonewareslord otomatik bir yöntem arıyor, yani verilerin manuel olarak düzenlenmesini gerektirmeyen bir yöntem.
user49740

O vermedi açıkça o LO / OO / Excel kullanmak istediğini söyledi, o% 100 otomatik yol istediğini beyan ederiz. Makroları kullanmıyorsa (ve yalnızca Excel AFAIK'in bir parçasıdır), 2 karakterin yerine başka bir seçeneği hatırlamıyorum. Perl, Python, vb. Bir senaryo istemiş olsaydı, bu soru SO için daha uygun olurdu.
Doktoro Reichard 24:13

Peki, yukarıdaki sadece bir örnek. Bunu, içinde 500 satır olan bir belge üzerinde çalıştırmam gerekiyor, bu yüzden el kitabı imkansız.
stonewareslord

0

Cevabım user49740'tan geldi:

sed -re 's/([^;]*);([^;]*);([^;]*);([^;]*);?/\1,\2,\3,\4\n/g' input.txt > output.txt

Dizenin ilk yarısı:

([^;]*);([^;]*);([^;]*);([^;]*);?

4 gruptan ([^;]*)(noktalı virgülten önceki tüm karakterler) sonra da noktalı virgül bulur . İkinci yarı:

\1,\2,\3,\4\n

Metni CSV biçiminde değiştirir. > output.txtDönüştürülen dosyayı output.txt dosyasına yazacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.