2013-03-04 11 views
5

Kurzfassung in CSV:Speicher Nur sichtbare Zellen aus Excel

Wie kann man nur die sichtbaren Zellen eines xls als csv speichern?

Längere Version:

Ich habe eine große .xls-Datei, die einige Daten enthält viele Blätter verteilt, die Ich mag würde zu einigen alten UNIX-Perl-Skripte zur Verfügung stellen. Ich habe etwas Code, der die Datei für eine Änderung sehen wird, die csv-Dateien neu generieren und sie an den Ort, wo ich sie brauche. Das Problem ist, dass die Leute, die die Tabellenkalkulation pflegen, alte Daten nicht entfernen wollen, sie verstecken sie einfach vor ihrer letzten Referenz. Meine Methode, nach csv zu speichern (wie Sie es in den meisten Anwendungsfällen erwarten würden), endet mit allen versteckten Daten und sichtbaren Seite an Seite mit keiner Möglichkeit zu wissen, was ursprünglich verborgen war. Ich habe ein wenig im Internet und hier gesucht und kann keinen Weg finden (dem ich folgen kann), dies programmatisch zu machen. Unten ist ein Teil des Codes, den ich benutze. Wenn es als Ausgangspunkt für eine Antwort verwendet werden könnte, würde es für mich leichter verständlich machen.

Vielen Dank im Voraus, ihr seid immer sehr hilfsbereit.


Nachfolgend finden Sie einige VBScript Ich fand, dass die Arbeit wird getan, sondern umfasst alle Daten (nicht nur sichtbare Daten).

Dim oExcel 
Set oExcel = CreateObject("Excel.Application") 
Dim oBook 
Set oBook = oExcel.Workbooks.Open("S:\NetowrkFolder\SpreadSheet.xls") 
Dim oSheet 

If oBook.Sheets.count = 1 Then 
    oBook.SaveAs "D:\output.csv", 6 
else 
    i=1 
    aname=split("D:\output.csv",".",-1,1) 
    For Each oSheet In oBook.WorkSheets 
    fname = aname(0) & "_sheet" & Cstr(i) 
    oSheet.SaveAs fname, 6 
    i=i+1 
    Next 
End If 

oBook.Close True 
oExcel.Quit 
WScript.Quit 

ich eigentlich dieses Projekt in AutoIt tue unten ist der AutoIt Code, den ich getan, um die gleiche Sache zu bekommen verwenden. Unglücklicherweise hat es immer noch alle versteckten Daten darin.

Local $oExcel = ObjCreate("Excel.Application") 
Local $oBook = $oExcel.Workbooks.Open("Y:\NetworkLocation\File.xls") 
Local $oWorkSheets = $oBook.WorkSheets 
Local $i = 1 
For $oSheet In $oWorkSheets 
    $oSheet.Auto 
    $oSheet.SaveAs(@ScriptDir & '\csv\Sheet' & $i & '.dat', 6) 
    $i += 1 
Next 
$oBook.Close(False) 
$oExcel.Quit() 

Antwort

4

Vielleicht ist dies auch einfach, aber es macht den Job, wie Sie es getan würde gerne haben:

Sub Macro1() 
    Selection.SpecialCells(xlCellTypeVisible).Select 
    Selection.Copy 
    Workbooks.Add 
    ActiveSheet.Paste 
    Application.CutCopyMode = False 
    ActiveWorkbook.SaveAs Filename:="D:\DOCUMENTS\visible.csv", FileFormat:= _ 
     xlCSV, CreateBackup:=False 
End Sub 

Der obige Code wird Makroaufzeichnung erzeugt. Der Hinweis ist, dass wir nur sichtbare Zellen auf dem Arbeitsblatt auswählen, kopieren Sie es in neue Arbeitsmappe und speichern Sie es dann als CSV. Originaldaten noch intakt. Der Rest des Codes ist trivial und kann auch mit dem Makrorecorder erzeugt werden.

Für weitere Ideen, dass SO thread: How do I export only visible cells from Excel to CSV?

+0

Ist das ein VBA-Makro? Aufgrund der Art und Weise, wie dies bei meiner Arbeit gemacht wird, wäre es viel praktischer für mich, wenn ich es tun könnte, ohne Makros in die Tabelle selbst zu fügen (es sei denn, dies könnte automatisch erfolgen). Danke für die Antwort! – Copas

+1

@Copas hast du den Link, den ich vorgeschlagen habe, überprüft? Es gibt mehrere weitere Lösungen. Aber ... warum hast du den Code selbst erstellt? Iv ist das keine Option für dich?) –

+0

@Copas es ist möglich, diesen Code in einer anderen Arbeitsmappe zu behalten, von der du Makro ausführst, Zielbuch öffnen und das obige ausführen Aktion. –

Verwandte Themen