Jak wyświetlić lub wyświetlić znaki niedrukowane w programie Excel?
Czy w MS Excel 2010 istnieje opcja, która pozwoli na wyświetlenie w komórce znaków niedrukowalnych (np. spacji lub znaku łamania linii wprowadzanego po naciśnięciu Alt-Enter)?
Czy w MS Excel 2010 istnieje opcja, która pozwoli na wyświetlenie w komórce znaków niedrukowalnych (np. spacji lub znaku łamania linii wprowadzanego po naciśnięciu Alt-Enter)?
Najprostszym sposobem jest po prostu zmiana czcionki na taką, która ma wbudowany widoczny glif dla spacji (lub innego znaku, który może być potrzebny do identyfikacji)
Niestety, nie mam żadnego dobrego przykładu takiej czcionki, ale bardzo łatwo jest dodać małą kropkę do istniejącej czcionki, używając dowolnego programu do edycji czcionek. Tylko nie zapomnij zmienić nazwy czcionki (nie pliku czcionki, ale NAZWY czcionki w pliku czcionki), tak aby łatwo było odróżnić tę własną czcionkę od oryginalnej, jeśli masz zainstalowane obie.
EDIT W końcu znalazłem czas na zrobienie takiej czcionki! Oto nadchodzi DottedSpace Mono, oparta na Bitstream Very Sans Mono, ale z wbudowanymi kropkowanymi spacjami: http://github.com/tanusoft/DottedSpaceMono
CTRL+H zastąp wszystkie spacje znakiem ~ To pomoże szybko znaleźć spacje bez programowania, a żeby odwrócić wystarczy zastąpić ~ znakiem “ ”.
Najlepszy program jaki znalazłem do porównywania tego typu plików, gdzie tekst nie jest wyświetlany to Ultra Edit. Musiałem go używać do porównywania plików EDI, plików interfejsów, przesyłek technicznych itp. MS Office po prostu nie jest dobrze wyposażony do tego zadania.
Chociaż nie można wyświetlać znaków specjalnych bezpośrednio w komórce, można użyć formuły w sąsiedniej (wstawionej) kolumnie, aby zastąpić znaki Enter i Spacja wybranymi przez siebie znakami!
Np.
=SUBSTITUTE(A1;" ";" ¶ ")
zastąpiłoby każdy linebreak symbolem słowa oznaczającego przerwę w linii. A zagnieżdżona formuła
=SUBSTITUTE(SUBSTITUTE(A1;" ";" ¶ ");" ";"\_")
zastąpi zarówno spację, jak i enter. (Uwaga: aby wprowadzić “Enter” do formuły, musisz nacisnąć Alt+Enter
podczas edycji formuły.
1 Użyj find i wpisz spację
2 Zrób Replace All i wpisz “[s-p-a-c-e]”
3 Opcjonalnie: Jeśli chcesz również zaznaczyć całą komórkę na czerwono, po prostu użyj selektora formatu obok tego
Wynik: Te pesky spacje ujawnią się super wyraźnie
Dlaczego musiałem to zrobić: Używałem funkcji COUNTA do znalezienia niepustych komórek w kolumnie. Jednak zwracała ona liczbę większą niż się spodziewałem. Debugowałem każdą komórkę po kolei i ku mojemu zdumieniu, niektóre pozornie puste komórki pokazywały COUNTA=0, a inne COUNTA=1, co nie ma sensu. Nie widziałem różnicy pomiędzy tymi dwoma. Okazuje się, że w tej funkcji liczy się pojedyncza resztka pusta, ale nie jest ona widoczna GDZIEKOLWIEK w komórce lub polu wprowadzania na górze.
Wniosek: Jeśli polegasz na COUNTA w ważnych zadaniach, lepiej upewnij się, że nie liczy ona tych kłopotliwych spacji, o których możesz nie wiedzieć, że tam są.
Zazwyczaj nie potrzebuję VBA, więc wolę robić rzeczy związane z Excelem w pythonie + openpyxl
from docx import Document #word docx py library
import openpyxl #excel py library
from openpyxl.styles import Color, PatternFill, Font, Border
from openpyxl.styles import colors
from openpyxl.cell import Cell
import re #regular expressions
import os #work with system
wb = openpyxl.load_workbook('test.xlsx') #open needed document
redFill = PatternFill(start_color='FFFF0000',
end_color='FFFF0000',
fill_type='solid') #function to fill bad cells red
n = 0
print (wb.sheetnames) #print all sheetnames to ensure theres no hidden
for sheet in wb.worksheets: #cycle through sheets in excel file
# get max row count
max_row=sheet.max_row
# get max column count
max_column=sheet.max_column
for i in range(1,max_row+1):
# iterate over all columns
for j in range(1,max_column+1): #cycle through all rows and columns
# get particular cell value
cell_obj=sheet.cell(row=i,column=j)
s = re.search('[^-*+()!№;%:?@#$%^&;:_=/\a-zA-Z0-9\ а-яА-Я°\".,,.«»<>ёЁ]', str(cell_obj.value)) #find bad symbols with regular expression
#^ find not normal characters
#s = re.search('[\n]', str(cell_obj.value)) find line end
if s:
print(n, " ", i, " ", j) #sheet, row, col
#print("^", s, "^") print bad symbol
#sheet.cell(row=i,column=j).fill = redFill
#color current cell wth spec chars red
print(n)
n+=1
wb.save("test.xlsx") #save redacted book
Nie odpowiada to dokładnie na twoje pytanie, ale ustawiam format liczb na taki:
;;;'@'
dla pojedynczych cudzysłowów, lub ten
;;;\"@\"
dla podwójnych cudzysłowów. To zawija cudzysłowy wokół każdego wprowadzonego tekstu. Ustawiłem również czcionkę na Courier New (lub inną o stałej szerokości).