データがExcelファイルとして出力され、一部のセルには、取り消し線文字として表された以前のバージョンのデータを含む文字列が含まれています。私はPerlとOLEを使ってExcelファイルを解析/操作する方法を知っていますが、セルレベルではテキスト形式でアクセス可能です。文字単位で書式設定にアクセスする方法はありますか?目標は、取り消し線としてフォーマットされたすべてのテキストを見つけて削除することです。Perl(またはPython)とExcelには、セル内の複数行のテキストで使用されるフォントの種類を判別する方法がありますか?
2
A
答えて
1
私はマシンにPythonをインストールしていないので、これはVBAソリューションです。うまくいけば、それは個々の文字のフォーマットにアクセスする方法を示すことができます。以下では
はRange("A1")
です:
Option Explicit
Sub test()
Dim wb As Workbook
Dim ws As Worksheet
Dim sentence As Range
Set wb = ThisWorkbook
Set ws = wb.ActiveSheet
Set sentence = ws.Range("A1")
With sentence
Dim i As Long
For i = 1 To .Characters.Count
If .Characters(i, 1).Font.Strikethrough Then
Debug.Print "strikethrough at character " & i
End If
Next i
End With
End Sub
は、出力を提供します:
strikethrough at character 17
strikethrough at character 18
strikethrough at character 19
1
使用Spreadsheet::ParseExcel
複数の形式で個々の細胞だけでなく、複雑なセルにアクセスします。複雑なセルはリッチテキストの書式設定を使用し、$cell->get_rich_text()
メソッドでアクセスできます。ここでは
のストライクアウト
の形式を、個々のセル内と、マルチフォーマットセルの一部として、perldoc Spreadsheet::ParseExcelの形式から順に探しています。
parse_lazy_dog.pl
#!/usr/bin/env perl
use warnings;
use strict;
use Spreadsheet::ParseExcel;
my $file = 'lazy_dog.xls';
my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse($file);
if (!defined $workbook) {
die $parser->error(), ".\n";
}
for my $worksheet ($workbook->worksheets()) {
my ($row_min, $row_max) = $worksheet->row_range();
my ($col_min, $col_max) = $worksheet->col_range();
for my $row ($row_min .. $row_max) {
for my $col ($col_min .. $col_max) {
my $cell = $worksheet->get_cell($row, $col);
next unless $cell;
print "Row, Col = ($row, $col)\n";
print "Value = ", $cell->value(), "\n";
print "Unformatted Value = ", $cell->unformatted(), "\n";
if (my $rich = $cell->get_rich_text()) {
# Multiple formats inside one cell
print " STRIKEOUT -> ";
my $pos = 0;
for my $rich_elem (@$rich) {
my ($char_pos, $font) = @$rich_elem;
if ($font->{Strikeout}) {
while ($pos++ < $char_pos) {
print " ";
}
} else {
while ($pos++ <= $char_pos) {
print "^";
}
}
}
print "\n";
} else {
# Entire cell has same format
my $format = $cell->get_format();
my $is_strikeout = $format->{Font}->{Strikeout};
if ($is_strikeout) {
print " STRIKEOUT -> ";
print "^"x(length($cell->unformatted()));
print "\n";
}
print "\n";
}
}
}
}
あなたは個々の文字や文字にアクセスすることができますように見えます
Row, Col = (0, 0)
Value = The
Unformatted Value = The
Row, Col = (0, 1)
Value = quick
Unformatted Value = quick
Row, Col = (0, 2)
Value = brown
Unformatted Value = brown
Row, Col = (0, 3)
Value = fox
Unformatted Value = fox
Row, Col = (0, 4)
Value = jumped
Unformatted Value = jumped
Row, Col = (0, 5)
Value = under
Unformatted Value = under
STRIKEOUT -> ^^^^^
Row, Col = (0, 6)
Value = over
Unformatted Value = over
Row, Col = (0, 7)
Value = the
Unformatted Value = the
Row, Col = (0, 8)
Value = lazy
Unformatted Value = lazy
Row, Col = (0, 9)
Value = dog.
Unformatted Value = dog.
Row, Col = (1, 0)
Value = THE QUICK BROWN FOX JUMPED UNDER OVER THE LAZY DOG.
Unformatted Value = THE QUICK BROWN FOX JUMPED UNDER OVER THE LAZY DOG.
STRIKEOUT -> ^^^^^
関連する問題
- 1. Meteorでユーザーが使用したログインの種類を判別するには?
- 2. USBホストデバイスの種類を判別する方法は?
- 3. 例外メッセージを使用して例外の種類を判断する方法はありますか
- 4. Perl CGIスクリプトでアップロードされたファイル名を確実に判別する方法はありますか?
- 5. のiOS:CNContactPicker didSelect - 選択したプロパティの種類を判別する方法は?
- 6. Excelマクロ - ラップされたテキストをマージされた列の行に分割する方法はありますか?
- 7. Excelのセルにも[プロパティ]ウィンドウを使用する方法はありますか?
- 8. これはどのデータベースの種類を判別できますか?
- 9. バイナリ/テキストファイルの種類をJavaで判別しますか?
- 10. どのようにPDFファイルの種類を判別する方法はありiTextSharp
- 11. Excelセルに複数の行がある場合、セルから別の行に移動します。
- 12. クリックハウスでtoUInt32OrZero関数を使用して列の種類を変更する方法はありますか?
- 13. Atomで複数のバージョンのPythonを使用してPythonスクリプトを実行する方法はありますか?
- 14. jconsole/jvisualvmからガベージコレクタの種類を判別しますか?
- 15. Excelでは、ユーザーが指定したセルと同じ行(別の列)にあるセルの値を返す関数がありますか? Sheet1の範囲A1に
- 16. .Net Exceptionの種類のリストとその使用方法に関するアドバイスはありますか?
- 17. Java:ファイルが配置されているドライブの種類を判別する方法は?
- 18. excelでその行のセルが変更された場合、その行に識別子を追加する方法はありますか?
- 19. Window Mobileでキーボードの種類を検出する方法はありますか?
- 20. 角度ファイルセーバーを使用してあらゆる種類のファイルをダウンロードする方法はありますか?
- 21. ハイブテーブルの列の種類を変更する方法はありますか?
- 22. TypeScriptインターフェイスのプロパティの種類を「抽出する」方法はありますか?
- 23. 要素のコンテンツの種類をテストする方法はありますか?
- 24. Excelで別のフォント色のテキストをカウントアップする方法
- 25. クロスプラットフォームのアプローチでドライブの種類を判断する方法
- 26. SSHを使用してリモートマシン上で複数のコマンドを発行する別の方法はありますか?
- 27. Excel用VBA:1つのセルに複数の行を連結する方法は?
- 28. どのような種類のオブジェクトがイベントの送信者であるかを判断する方法は?
- 29. テーブル内で、1つのセル内に複数の行のセルを入れ子にする方法はありますか?
- 30. さまざまな種類のPerlテストを分離することで、それらをすべて実行する必要はありませんか?
は、Win32 :: OLEと範囲を出力します。http:/ /www.perlmonks.org/?node_id=888927 – ThisSuitIsBlackNot