プログラマ38の日記

主にプログラムメモです。

CSV: Excelで開く際に、ゼロサプレスや日付変換を回避する

CSVファイルは、大体Excelに関連付けがされていてダブルクリックするとExcelで開きます。
Excelで中身を確認できるのはとても便利ですが、次のようになってしまい使いづらいことがあります。
CSVの文字は「0001」なのに、Excelでは「1」となる
CSVの文字は「2000-01」なのに、Excelでは日付の「2000/1/1」となる

この現象は数式扱いにすると回避できます。


テキストが変換されてしまうCSVの中身

"0001","2000-01"

Excelで開いた場合の表示

f:id:crmprogrammer38:20180711102325p:plain
ゼロサプレスされるのと、勝手に日付変換されてしまいます。


テキストを数式扱いにしたCSVの中身

="0001",="2000-01"

Excelで開いた場合の表示

f:id:crmprogrammer38:20180711102436p:plain

セルは数式の値でcsvの文字列がそのまま表示されます。

 

気をつけること

ただし、数式扱いにしなければ正しく表示される値でも、数式扱いにすると表示がおかしくなる場合があります。

おかしくなるのは、文字列中にカンマ(,)や改行( )がはいる場合です。


通常のCSV

"000,000,000","AAAAA
BBBBB"

Excel表示

f:id:crmprogrammer38:20180711102214p:plain
正しく表示されます

 

数式に変更

="000,000,000",="AAAAA
BBBBB"

Excel表示

f:id:crmprogrammer38:20180711102123p:plain
表示が崩れてしまいます。


この現象を回避するため、テキスト内のカンマと改行も数式で表現しておく必要があります

="000" & char(44) & "000" & char(44) & "000",="AAAAA" & char(10) & "BBBBB"

 ※カンマはchar(44) で、改行はchar(10)で表現しています。

Excel表示

f:id:crmprogrammer38:20180711102106p:plain

最後に

テキストを数式扱いしたCSVは連携用途で扱えません、Excelでの表示用途に限定したやり方になります。

業務ユーザにCSVを配布した際にゼロサプレスされては困る、勝手に日付変換されたら困る項目に限定して数式扱いにするのがいいのかなと思います。

Salesforce: レイアウト項目一覧の取得Excelマクロでミニページレイアウトの表示を追加しました

レイアウトの一覧とレイアウト項目 を取得するExcelマクロを以前作成しました。

レイアウト項目は、詳細項目と関連リストを対象としていたのですが、ミニページレイアウトの項目の追加しました。

 

ダウンロードはこちら からになります。

 

次のようにレイアウト項目でミニページレイアウト項目とミニページレイアウトの関連リストを表示を追加しました。

 

f:id:crmprogrammer38:20180620195657p:plainf:id:crmprogrammer38:20180620195747p:plain

 

[前回作成時の記事]

crmprogrammer38.hatenablog.com

 

最後に

ページレイアウトを設定する時に、ミニページレイアウトの設定はあまり深く考えないで項目を置いておくことが多いです。

そして、レコードタイプの追加にあわせてレイアウトを増やしていくと、見直し作業が意外と手間な時があります。

そんな時に使えるかなーと思います。

といっても、メタデータAPI名を一覧で表示しているだけで、ラベルの表示はしてなくてあまり使いやすくはないですけどね。

Salesforce: Lightningレコードページの割り当てをリリースする

結論として、Lightningレコードページの割り当てをリリースするには、「オブジェクト」「Lightning アプリケーション」をリリースする必要があります。

 

メタデータでLightningレコードページの割り当てがどこに記載されているかを確認したところ、オブジェクトとLightning アプリケーション(メタデータのCustomApplication)に情報が記載されていました。

 

メタデータの詳細

まず、Lightningレコードページの割り当ては次の内容です。

f:id:crmprogrammer38:20180616223338p:plain

  • 組織のデフォルト
  • アプリケーションのデフォルト
  • アプリケーション、レコードタイプ、プロファイル

表示の優先度は下からなので、「アプリケーション、レコードタイプ、プロファイル」を指定していれば、組織のデフォルトより優先されて表示されます。

 

上記の内容はメタデータ上では次のようになっています。

 

組織のデフォルト(メタデータ:オブジェクト)
    <actionOverrides>
        <actionName>View</actionName>
        <comment>Action override created by Lightning App Builder during activation.</comment>
        <content>LightningレコードページのAPI</content>
        <formFactor>Large</formFactor>
        <skipRecordTypeSelect>false</skipRecordTypeSelect>
        <type>Flexipage</type>
    </actionOverrides>

 

アプリケーションのデフォルト(メタデータ:アプリケーション)
    <actionOverrides>
        <actionName>View</actionName>
        <comment>Action override created by Lightning App Builder during activation.</comment>
        <content>LightningレコードページのAPI</content>
        <formFactor>Large</formFactor>
        <skipRecordTypeSelect>false</skipRecordTypeSelect>
        <type>Flexipage</type>
        <pageOrSobjectType>オブジェクトのAPI</pageOrSobjectType>
    </actionOverrides>

 

 アプリケーション、レコードタイプ、プロファイル(メタデータ:アプリケーション)
    <profileActionOverrides>
        <actionName>View</actionName>
        <content>LightningレコードページのAPI</content>
        <formFactor>Large</formFactor>
        <pageOrSobjectType>オブジェクトのAPI</pageOrSobjectType>
        <recordType>オブジェクトのAPI.レコードタイプのAPI</recordType>
        <type>Flexipage</type>
        <profile>プロファイル名</profile>
    </profileActionOverrides>

 

最後に

今までのプロファイル・レコードタイプ別のレイアウト割り当てで、ページの項目の表示を変更した後に、さらに、アプリケーション・レコードタイプ・プロファイルでLighningレコードページで表示の使い分けができて便利です。

が、リリース時の確認も本当に大変だなーと思いました。(アプリケーションをリリースしないとなると手動になってしまいますし)

Salesforce: オブジェクト情報取得マクロとメタデータエクスポート取得ツールをバージョンアップしました(APIVer43)

SalesforceがSummer18(APIVer43)にバージョンアップしたので、次のツールのバージョンをあげました。

 

Excel VBA : オブジェクト一覧と項目一覧の取得マクロ

 

Java : メタデータエクスポートツール

 

使い方は前回の内容から変更はありません。 

crmprogrammer38.hatenablog.com

  

crmprogrammer38.hatenablog.com

 

Api43から、SOAP APIでオブジェクトの数式項目「空白項目の処理(formulaTreatNullNumberAsZero)」を項目の属性として取得できるようになったのでオブジェクト項目の一覧マクロで表示を追加しました。

 

他に、excelマクロには表示していませんがaiPredictionFieldという属性も追加されています。これからAI用の項目も追加されていくのか楽しみです。

 

また、Api43で次のオブジェクトなどが追加されています。

・アプリケーション定義[AppDefinition]
・タブ定義[TabDefinition]
・アプリケーションタブメンバー[AppTabMember]

 

標準のアプリケーションの物理名などがわかりやすくなったなーと思いました。

Salesforce: レイアウト一覧とレイアウト項目一覧を表示するExcelマクロを作成しました

レイアウトに表示している項目を一覧にしたい時があります。

メタデータを分解する作業も意外と骨があるのでExcelマクロを作成しました。

レイアウトの項目のAPI名を取得することができます。

関連リストの項目も出しているのでちょっと便利かなと思います。(ですが、関連リストの項目は独特の形式のようです)

 ※このツールは、TLS1.1以上で通信する必要があり、Windows10や、TLS1.1以上を使うようにレジストリを変更したWindows7などで利用できます。

 

ダウンロードはこちら からになります。

 

機能としては

  • レイアウトの一覧を表示
  • レイアウト項目の一覧と関連リストの一覧を表示
  • ミニページレイアウトの項目と関連リストを表示

の2つで、それぞれ直接salesforceから一覧を取得します。

 

レイアウトの一覧を表示

マクロの操作感は次の通りです。(以前から作成しているマクロと同じです)

Salesforceの接続情報を指定
②通信設定を指定
③レイアウト一覧取得ボタンをクリック

f:id:crmprogrammer38:20180605084226p:plain

 

そうするとレイアウトの一覧が表示されます。

Metadata APIのlistMetadataの情報のため、ログインしたユーザがMetadata API

を使用できる必要があるのでご注意ください。

 

レイアウト項目の一覧を表示

レイアウト一覧で取得したレイアウトのfullNameがリンクとなっていて、そのリンクをクリックするとそのレイアウトの項目一覧が別シートで追加されます。


リンクをクリックすると、シートが追加されて項目一覧が表示されます。

f:id:crmprogrammer38:20180605084443p:plain

f:id:crmprogrammer38:20180620195657p:plainf:id:crmprogrammer38:20180620195747p:plain


最後に

いくつかVBAのプログラムを書いてきましたが、スパゲティ具合がひどいなーと思っています。作りたいマクロがひと段落したら関数などをつかって冗長な箇所をきれいにしたいなと思います。

 

が、一度作ったものを綺麗にするのは苦手です。

 

Salesforce: プロファイルのIPアドレス制限の説明がメタデータでエクスポートできるようになってました

ついこの間まで、IPアドレス制限の説明はメタデータで取得できませんでした。

ですが、現時点(2018/5/15)で取得できるようになっていました。

 

画面の登録内容

f:id:crmprogrammer38:20180516093726p:plain

 プロファイルのメタデータの内容

f:id:crmprogrammer38:20180516094100p:plain

 

プロファイルのメタデータのテキストを使えば、今どの範囲に開放しているのかと、その説明が取得できるようになります。個人的にちょっと嬉しいです。

 

※補足として、Summer18(Apiバージョン43)になった環境でIPアドレス制限の説明が取得できるようになっているようです。
(まだSpring18(Apiバージョン42)の環境では取得できませんでした。)

 

雑記: 通勤つらい

気持ちがつらくて通勤できないとかそういうことではないですが、漠然と通勤てつらいと感じます。毎日同じように混んでいて、時々何かの理由で電車が遅延するとさらに混んでしまいます。

 

電車の中で体調をくずした人がいて電車が遅延するという案内があると、朝から調子悪いなら休めばいいのになーと思ってしまいます。

 

でも、その人にはその人の事情があって体調不良をおしてでも出勤しないといけなかったんだと思います。

 

気軽に簡単に休める職場とか夢物語ですし、そんなことでは仕事は成り立たないですが、本当に調子悪いのに休まない、休めないという職場は現実にあるのだと思います。

 

リーダーやマネージャーとしてそういう環境や空気を作ることができたら、ある意味成功なんだと思います。限界近くまで頑張ってくれるのでパフォーマンスは上がりますし。

 

でも、負ける(休む)ときは死ぬときみたいな極限状態なら休めないですが、長い時間極限状態にいたら心身ともに消耗してしまいます。

 

 頑張らないといけない時があったときに、自分の意思で頑張ると決められることが大切なのだと思います。乗り切った時に得られることもあります。

 

でも誰かの決めた仕組みや期限のなかで頑張らさせるのが一番きついんだよなーとすし詰めの電車の中でそんなことを思いました。