Excel Chinesen-Schrott aus den Formatvorlagen werfen
#1
Hallo,

ich habe eine Mappe übernommen, in der es jede Menge Formatvorlagen  mit chinesischen Schriftzeichen gibt, die in der Mappe weder gebraucht noch gewünscht werden und sie nur verlangsamen. 

Wenn ich versuche, sie von Hand zu löschen, passiert gar nichts, daher habe ich mir einen Makro gebaut, der aber leider auch nicht das gewünschte Ergebnis bringt:

Code:
Sub BenutzerdefinierteFormatvorlagenKillen()
Dim styMyStyle As Style
    For Each styMyStyle In ActiveWorkbook.Styles

            If NonASCIIidentifizieren(styMyStyle.Name) = True Then
'                On Error Resume Next
                Debug.Print styMyStyle.Name
                styMyStyle.Delete
'                On Error GoTo 0
            End If

    Next styMyStyle
End Sub

Function NonASCIIidentifizieren(ByVal strText As String) As Boolean
    Dim i As Long, c As String
   
    NonASCIIidentifizieren = False
   
    For i = 1 To Len(strText)
        c = Mid(strText, i, 1)
        If AscW(c) > 256 Then NonASCIIidentifizieren = True
    Next

End Function

Wenn ich "on Error resume next" aktiviere, wird der Chinesen-Quark übersprungen, wenn ich es auskommentiere, bekomme ich die Meldung 
"Die delete-Methode des Style-Objekts konnte nicht ausgeführt werden"
Das vorgeschaltete Debug.Print liefert ordnungsgemäß die Namen der Formatvorlagen, die ich löschen will.

Freue mich über eure Vorschläge!
Top
#2
Hallo,

ich denke, eine Beispieldatei wäre hier sehr sinnvoll. Denn ich schätze mal, dass kaum jemand über eine
Datei verfügt, die chinesische Styles enthält.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Top
#3
Bei den Styles habe ich nicht gefunden, aber bei den "Themes" (theme1.xml)

MS Office 2016:

Code:
<a:font script="Hang" typeface="맑은 고딕"/><a:font script="Hans" typeface="等线"/><a:font script="Hant" typeface="新細明體"/>
Top
#4
Hier die Beispieldatei, den Makro habe ich drin gelassen. 
@Fennek: hast du das nur bei theme1 gefunden? Heißt das, ich müsste sämtliche Themes editieren und dann den Chinesenkram löschen?


Angehängte Dateien
.zip   Beispiel_Chinesenschrott.zip (Größe: 1,27 MB / Downloads: 7)
Top
#5
In der Datei gibt es diese Styles:

Code:
<name val="돋움"/><family val="3"/></font><font><sz val="12"/><name val="바탕체"/><family val="3"/></font><font><sz val="12"/><name val="官帕眉"/><family val="3"/><charset val="134"/></font><font><sz val="12"/><name val="¹ÙÅÁü"/><family val="3"/><charset val="134"/></font><font><u/><sz val="10"/><color indexed="12"/><name val="Arial"/><family val="2"/></font><font><sz val="10"/><name val="Helv"/><family val="2"/></font><font><sz val="12"/><name val="¹UAAA¼"/><family val="2"/><charset val="134"/></font><font><sz val="11"/><color indexed="17"/><name val="宋体"/><family val="1"/><charset val="136"/></font><font><sz val="10"/><name val="PragmaticaCTT"/><family val="1"/></font><font><sz val="11"/><color indexed="14"/><name val="宋体"/>

Hallo Frau S. in V (Namen nennen ist hier unerwünscht)

geht Ihr Code nicht?

Code:
Sub BenutzerdefinierteFormatvorlagenKillen()
Dim MyStyle As Style, X As Integer, Y As Integer
X = 0: Y = 0
    For Each MyStyle In ActiveWorkbook.Styles
        Y = Y + 1

            If NonASCIIidentifizieren(MyStyle.Name) = True Then
                On Error Resume Next
                    X = X + 1
                Debug.Print MyStyle.Name
                MyStyle.Delete
                On Error GoTo 0
            End If

    Next MyStyle
    Debug.Print "Gesamt: " & Y & " Anzahl Chinesenschei�: " & X
End Sub

Function NonASCIIidentifizieren(ByVal strText As String) As Boolean
    Dim i As Long, c As String

    NonASCIIidentifizieren = False

    For i = 1 To Len(strText)
        c = Mid(strText, i, 1)
        If AscW(c) > 256 Then NonASCIIidentifizieren = True
        Exit For
    Next

End Function

Ein Sicherheitscheck war negativ, aber der VBA-Code (Klassen, Forms, RibbonX) ist ziemlich komplex. Die Namen der versteckten Sheets sind aussagekäftig.

Nach dem Speichern als xlsx sind die Styles leider verschwunden, also keine Chance das zu testen.

mfg
Top
#6
Hallo,

die Styles per Code zu löschen, wird möglicherweise nicht funktionieren, da das Löschen gesperrt ist (jedenfalls ist das in der Datei hier so),
weil die Styles anscheinend in Benutzung sind. Normalerweise müsste folgender Code zu Löschen ausreichen (geht nicht, denn gesperrt) ...

Code:
Sub StylesLoeschen()
 
  Dim n As Long
 
  For n = ThisWorkbook.Styles.Count To 1 Step -1
   
    If Not ThisWorkbook.Styles(n).BuiltIn Then
     
      ThisWorkbook.Styles(n).Delete
     
    End If
   
  Next
 
End Sub

Auch das manuelle Löschen klappt (bei mir jedenfalls) nicht, eben wegen der Sperrung. Du könntest nun versuchen, erstmal alle
Formatierungen mit den Styles aufzuheben und dann Löschen. 

Andere Methode wäre das Eingreifen in den XML-Code der Excel Datei. Dazu brauchst Du Notepad++ (empfohlen, geht jetzt auch
mit dem Windows-Notepad, ist aber umständlicher und nicht von mir ausprobiert.

Mit einer Kopie der Datei, könntest Du folgendes ausprobieren ...

01. Datei in einem leeren Ordner ablegen und in Dateiname.zip umbenennen
02. Die Zip-Datei entpacken (nicht direkt aus dem Explorer, wirklich entpacken), ggf. als Ordner entpacken
03. In den Ordner xl navigieren und die Datei styles.xml in Notepad++ öffnen
04. Suche nach 
Code:
<cellstyles

05. Den Text danach ab dem ersten
Code:
<cellstyle
markieren (siehe Bild hier unten) bis zum Anfang von
Code:
</cellstyles>

06. Den markierten Text löschen, sodass erstmal nur folgendes übrig ist
Code:
<cellsstyles ...> </cellstyles>

07. Folgenden Text dazwischen setzen...
Code:
<cellStyle name="Normal" xfId="0" builtinId="0" customBuiltin="1" />

08. Das sieht dann im Ergebnis wie im zweiten Bild hier unten aus.
09. Die Datei speichern.
10. Das Gesamtpaket wieder in eine Zip-Datei packen, also falls Du es in einem Ordner entpackt hattest, den Inhalt des Ordners als Zip.
11. Die neue Zip-Datei in Dateiname.xlsm umbenennen
12. In Excel öffnen und testen.

   
   

Ich habe das mit Deiner Datei ausprobiert und das hatte funktioniert. Ist aber jetzt keine Garantie, dass es auch mit Deiner
Originaldatei funktioniert.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
[-] Folgende(r) 1 Nutzer sagt Danke an maninweb für diesen Beitrag:
  • SIH007
Top
#7
Die Datei hat mir recht viel Ärger bereitet:

- Sheet 3: 12 MB (unkomprimiert
- duzende Fotos in CustomUI/images

aber etwas habe ich gelernt:

In der Workbook.xml

Code:
<sheet name="Tabelle1" sheetId="17" state="veryHidden" r:id="rId2"/>

kann man das "state="veryHidden"" mit dem Editor löschen und die geänderte Datei mit 7-zip zurück-kopieren.

Danach sind alle Sheets wieder sichtbar.

Mit abgeschalteten Makro kann ich das in LibreOffice nicht machen.

------------------------

Falls das gegen die Foren-Regeln verstoßen sollte, bitte löschen.
Top
#8
Das Thema beschäftigt mich immer noch:

Nach dem Öffnen mit Excel hat es meine "Personal.xlsb" "zerschossen", ein guter Grund die Datei noch einmal genauer zu betrachten und eine grundsätzliche Frage zu stellen:

MS legt für "intelligente" Tabellen im Ordner "customXML" die Datei "item1.xml" ab. Diese enthält im Tag "DataMashup" Base64 codierte Inhalte. Nach dem Decodieren ergibt sich:

Code:
  PK   5wdP�
&��   �     Config/Package.xml � (�                     ���
�@�_E��F��z�n    A]E7]�5�5}�=R�PPF�n3�|0��1��ƻ����$�#�2EWjS%dp'IR���8��^ec�����]bJ�q�1���h���l�/j��6��P�K��)"�
�#
G:ǘi3k� Z C��jh��+Y*�A:[���    PK   5wdP�髤   �     [Content_Types].xml � (�                     m�K
�0 D�y���@5e܀ D�����E�l,8W mw��g�y��zW�d�1��)�%r��z�*���{8���(�uQA���tdu,| ��ƏVs>��6w�n�r��;&ǒ�PWgj�
4���,��qZss��ĸ����?y�����$m�v!q^PK   5wdP(�G�        Formulas/Section1.m � (�                  
   +NM.���S�І� PK-    5wdP�
&��   �                    Config/Package.xmlPK-    5wdP�髤   �                �   [Content_Types].xmlPK-
   5wdP(�G�                   �  Formulas/Section1.mPK      �   C      <?xml version="1.0" encodin
g="utf-8"?><PermissionList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001
/XMLSchema"><CanEvaluateFuturePackages>false</CanEvaluateFuturePackages><FirewallEnabled>true</FirewallEnabled></P
ermissionList>�      u  <?xml version="1.0" encoding="utf-8"?><LocalPackageMetadataFile xmlns:xsi="http://www.w
3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><Items><Item><ItemLocation><ItemType>A
llFormulas</ItemType><ItemPath /></ItemLocation><StableEntries><Entry Type="Relationships" Value="sAAAAAA==" /></S
tableEntries></Item></Items></LocalPackageMetadataFile>   PK                  �      Ќ����z �O—�   5�V�
@��M|g�^\         f  �      0~�/E5D$���    �  �      ��r���;�`��Ő��P   �6�� P�Ȟ��u Y�ܥO�%�-�2�8��
�7��2+hZ�[�;����꿸K�K���G�a� n�o�+���o#   &�;�͌o�N�"j�A�>�

Es sind am Anfang und Ende jeweils eine "PK", also zip-Datei und lesbarer Text.

--->>>>>> Frage: Wie kann man den Inhalt der zip-Teile lesen?

Einfach in eine Datei zu kopieren und mit 7zip öffnen geht nicht, da wegen der \x00 bytes am Ende der Datei die zip-Struktur nicht stimmt.


Danke

mfg

------------------------------
Ergänzung:

Die ersten 80 Zeichen sind als Hex:

Code:
0000  0000  0000  0000  001b  0003  0000  0000  0050  004b  0003  0004  0014  0000  0002  0000  0008  0000  0035  0077  
0064  0050  fffd  000a  0026  fffd  fffd  0000  0000  0000  fffd  0000  0000  0000  0012  0000  001c  0000  0043  006f  
006e  0066  0069  0067  002f  0050  0061  0063  006b  0061  0067  0065  002e  0078  006d  006c  0020  fffd  0018  0000  
0028  fffd  0014  0000  0000  0000  0000  0000  0000  0000  0000  0000  0000  0000  0000  0000  0000  0000  0000  0000

PK: 50 4b
Utf-8 (die häufigen "fffd" überraschen)
Top
#9
@maninweb
Super, hat geklappt. Muss ich mir fürs nächste Mal gleich notieren, dieser Chinesenquark nagt offenbar ganz schön an der Performance, wenn die Mappe etwas mehr machen soll.
Thumps_up
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste