次のようなファイルからテキストを定期的に抽出する必要があります。
理想的には、次の 2 つの方法があります。
テキストの個々の行のみ
例:
実際に出版物が出版されましたこのデータを分析し、
最近発表されたより多くのデータ
段落形式(異なる行のテキストを 1 つのテキスト ブロックに結合し、Word、Google ドキュメントなどで編集できるようにする)
例:
完了しました。このデータから実際に出版物ができました。最近発表されたさらなるデータに取り組んでいます。
ファイルを受け取ると、すべてが列 A にあります。不要な数字の行が 2 行あり、その後に必要なテキストの行が 1 行、その後に空白の行があり、その後、このパターンが何千行も繰り返されます。
当然ですが、これを手動で行うには長い時間がかかるので、ご協力いただければ幸いです。
答え1
A 列の 3 行目ごとに、つまり A3、A7、A10 などのデータを抽出する必要があるようです。
まず、B 列の最初の 2 つのセルに 3、7 と入力し、下にドラッグして 3、7、10、13 などの連続した数字を作成します。
ここで、C1 に数式 =INDIRECT("A"&B1) を記述します。これにより、A3 セルのテキストが表示されます。数式を下にコピーして、A7、A10 などのテキストを表示します。
すべてのテキストを結合するには、Excel 2016 を使用している場合は CONCAT または TEXTJOIN 関数を使用できます。TEXTJOIN の利点は、テキスト間にスペースやカンマなどの区切り文字を使用できることです。空のセルを無視することもできます。次の例では、スペースが区切り文字として使用され、True が空のセルを無視するために使用されています。
=TEXTJOIN(" ",TRUE,C1:C11)
以前のバージョンでは、CONCATENATE 関数を使用できますが、すべてのセル参照を 1 つずつ記述する必要があります。
=CONCATENATE(C1,C2,C3,C4,C5,C6,C7,C8).
答え2
コードを書かずにこれを行う簡単な方法はないと思います。おそらく Excel の VBA で実行できると思いますが、私はあまり経験がありません。
Python でこれを行う方法の例を次に示します。このスクリプトは、指定された列のセルを調べ、値が数字で始まっていない場合はその値をファイルに出力します。
Excelシート:
出力:
Here's the first string and the second now a third
コード:
from openpyxl import load_workbook # package for working with xls files
import re # regex package
workbookName = 'test.xlsx'
sheetName = 'Sheet1'
column = 'A'
maxRow = 50
outputFile = 'excelOutput.txt'
# Open the workbook
wb = load_workbook(workbookName)
# Create a file to put the data into
fh = open(outputFile, 'w')
# Loop through all the rows
for kk in range(1,maxRow):
# Grab the cell's value
cellValue = wb[sheetName][column+str(kk)].value
# If the cell isn't empty
if cellValue != None:
# If the cell doesn't start with a number
if not re.search("\\d",str(cellValue)[0]):
# Write the value from the cell into the text file
fh.write(cellValue)
# Close the file
fh.close()
答え3
範囲内の不要な行を簡単に削除するには、最初に行を並べ替えて、たとえばすべての空の行をグループ化するのが最適です。組み込みのセルの並べ替えを使用するのはかなり簡単ですが、テキストの最初の順序を維持するには、いくつかの追加手順が必要です。
A1:A200
例として、データが範囲内にあるとします。実際のデータに応じて必要に応じて調整してください。
1
セル に数字 を挿入し、セル にB1
数字 を挿入します。セルを選択し、 関数を適用して、列 に 1 から 200 が含まれるようにします。これは、後でテキストを最初の順序で返すのに役立ちます。2
B2
B1:B200
fill
linear
B
範囲を選択し
A1:B200
て並べ替えを適用します。これで、数値行、時間枠行、テキスト行、および空の行がグループ化されます。したがって、不要な行を選択して削除するのは簡単です。不要な行を削除すると、A1:B50
列にテキストと元の行番号を含む範囲が作成されますB
。テキストの正しい順序を復元するには、範囲を選択し
A1:B50
、列で並べ替えますB
。
テキストを にコピーしてWord
さらに処理するには、 を選択してコピーし、 に貼り付けますWord
。表の書式設定を削除し、検索と置換を使用して行を連結します (paragraph
で検索して置換しますspace
)。