Clipboard.get-string のバグ? - Printable Version +- Curl Global Community (https://communities.curl.com) +-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1) +--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2) +--- Thread: Clipboard.get-string のバグ? (/showthread.php?tid=912) |
Clipboard.get-string のバグ? - umemura - 06-13-2013 エクセルからコピーされたデータをClipboard 経由で、グリッドに貼り付けを行う際、 ひとつのセルのなかで改行されている場合に、Curl側でその改行を削除し、ひとつのセルの中のデータとして整形したいと思ったのですが、 うまく判別する方法を考えられませんでした。 エクセルからコピーされたデータとしては、セル内の改行は、LF(ラインフィード)になっているので、 この文字を削除すればよいかと思ったのですが、 Clipboard.get-string で取得した後の文字は、LFは、CR(キャリッジリターン)に変換されているため、 判別する基準として利用できません。 セル内に改行がある場合はダブルコーテーションでくくられるので、 それを判断の基準にしようかと思ったのですが、エスケープ(2重に)されたダブルコーテーションがあった場合や、 改行直前にダウブルコーテーションがあった場合など、 判別が複雑になるため、今のところ、連続した二つのダブルコーテーションはすべて削除してしまう、 という方法に落ち着きました。 WindowsのようにCR とLF を混合しない、Mac や Linux に対応しているための問題なのかもしれませんが、 エクセルからのコピーは、現場では多用されるので、できれば対応してもらいたいです。 RE: Clipboard.get-string のバグ? - heavybugtracker - 06-20-2013 「エクセルからのコピーは、現場では多用されるので、できれば対応してもらいたいです。」 具体的に、どのような対応ですか? ちなみに、Excelのセル内改行コードについて、このような情報もあるみたいです: 「Excelの改行コードが0Aだけなのは昔からの仕様で、なぜそうなっているのか本当の理由はわかりません。ExcelはもともとMacintosh用に開発されたアプリだから・・・という話も聞きますが、本当のところはわかりません。理由はともあれ、Excelの改行コードは0Aだけだということです。 では、セル内の改行コードはどんなときも0Aだけかというと、実は違います。手動操作でAlt+Enterキーを押してセル内改行をした場合には、改行コードとして0Aだけが入力されますが、マクロなどでユーザーが明示的に0D 0Aの改行コードを使用した場合は、そのまま0D 0Aが保存されます。実際にやってみましょう。次のマクロで、セルB2に0D 0Aで改行したデータを入力してみます。 」 http://officetanaka.net/excel/vba/tips/tips89.htm RE: Clipboard.get-string のバグ? - umemura - 06-28-2013 説明不足ですいません。私の「対応」が指す内容は、 キャリッジリターンと、ラインフィードを分けて取得したい、という意味です。 現在、Curlでは、キャリッジリターン、ラインフィードのどちらも LF として取得されている、という認識です。 下記サンプルでは、"\r\n"=CR+LF も、"\n"=LF も、どちらも文字コードとしては「10」で表示されます ASCIIに準じると、各改行コードの文字は、CR(復帰、0x0D=16)、LF(改行、0x0A=10)となり、 どちらも、int形式では 10 となることが、このように判断しました。 (NewlineSequence の指定が間違っていたらご指摘ください。) Code: {let input-ta:TextArea = ただ、heavybugtracker さんが引用してくださった内容を見る限り、 キャリッジリターン、ラインフィードとを個別に判別できたとしても、 エクセルのシートからコピーされたデータをそのままグリッドに貼り付けるには、 正確に"(ダブルクォーテーション)でくくられた情報を判断する処理が必要そうですね。 |