web-dev-qa-db-ja.com

Googleスプレッドシートのセルの書式設定が保持されません

私のGoogle Spreadsheetは一部のフォーマットを保持しません。たとえば、シート全体でフォントサイズを12に設定するたびに、新しくコピーされたデータはより小さいフォントサイズを使用します。

これは、3月にNew Sheetsにアップグレードした後に問題になり始めました。

問題を再現する例 sheet

再現手順

  1. CTRL + A シート全体を選択するには2回
  2. フォントサイズを12に設定します
  3. クリアテキストを列Eにコピーして貼り付けます

期待される結果

  1. 列Eのテキストのフォントサイズは12です

実際の結果

  1. 列Eのテキストはsmallerフォントサイズです

更新:日付のフォーマットの問題を再現するために、別の sheet を作成しました。

再現手順

  1. 列Dの日付書式をDD MMM YYYに設定します(2015年6月1日など)
  2. 列Bのセルに短いテストを挿入します

期待される結果

  1. LMDTイベントでトリガーされるOnEditイベントはフォーマットを保持します:2015年6月1日

実際の結果

  1. LMDTイベントでトリガーされたOnEditイベントは、フォーマットを保持しません:2015年1月6日07:20:34

    time = Utilities.formatDate(time, "UTC", "dd-MM-yyyy **HH:mm:ss** ");
    
    s.getRange(r.getRow(), LMDTCol).setValue(time);
    

はい、書式設定はdd-MM-yyyyHH:mm:ssに設定されますが、過去5年間ほど、列の書式設定は書式設定よりも優先されましたスクリプトで設定します。

1
matcheek

手動貼り付け

確かに、プレーンテキストを貼り付け Ctrl-V その結果、デフォルトサイズは10になります。プレーンテキストが入っていても、貼り付けはセルのフォーマットを上書きすると理解されているようです。

解決策は、を使用して貼り付けることです Ctrl-Shift-V、つまり、値のみを貼り付ける。次に、テキストがどこから来たかに関係なく、スプレッドシートで設定されているように、フォントサイズは12 ptです。

スクリプト修正

通常、.setValue(value)を使用するだけでは、セルの既存の書式設定が残ります。たとえば、セルA1が「2015年6月1日」としてフォーマットされている場合、実行

sheet.getRange("A1").setValue(new Date());

そのフォーマットを尊重します。

スクリプトがUtilities.formatDate()で異なるフォーマットを明示的に適用する場合にのみ、フォーマットが変更されます。これは予想されることであり、古いバージョンが異なる動作をするという事実は、より多くのバグまたは貧弱な設計です。

新しいシートには、多少の 異なるフォーマット機能 があることが知られています。

移行は、一部のスクリプトの重大な変更になる可能性があります。たとえば、1つのセルに50000文字を超える文字を保存しようとしたため、スクリプトの1つが動作しなくなりました(古いバージョンでは可能ですが、新しいバージョンではできませんでした)。

1
user79865