タグ別アーカイブ: SharePoint

ファイルのアップロードを行えるようにするアプリ作成~Power Apps~

【どうしても煩雑になりがちなファイルの管理をPower Appsで行いましょう!】

今回の記事では、Power AppsからSharepointサイトのドキュメントにファイルをアップロードするアプリを作成します

このアプリを使用することで、ファイルの保存場所を管理しやすくなります

また、手間なファイルのアップロードの処理を簡略化できます

アプリ作成はそんなに手間暇かかりません

ただし注意点がが幾つかあります

記事の中でそちらについては明記してありますので、都度ご確認の程よろしくお願いします

ポイント

今回のアプリはPower Automateのフローと連携します

添付ファイルの内容をPower AppsからPower Automateフローに渡します

Power Automateフローでは、Power Appsから受けとった添付ファイルの内容を基にして指定Sharepointサイトのドキュメントにファイルを作成します

このファイルの受け渡し方が少々、とっつきにくいです

ファイルを添付する仕組みの作成~Power Apps~

最初にPower Appsでスクリーンを2つ用意します

そのうちの1つのスクリーンでフォームを作成します

フォームのデータソースは何でも構いません

欲しいのは「添付ファイル」のパーツです

下の画像のパーツを切り取り、別のスクリーンに貼ります

別のスクリーンにパーツを貼り付けた後は、元のスクリーンは削除しましょう

次に貼り付けたパーツのプロパティを以下のように設定します

・Items ⇒Blank()
・DisplayMode ⇒DisplayMode.Edit               ・MaxAttachments ⇒1

*パーツには扱いやすい名前を付けましょう!

ファイル作成をするフローの作成~Power Automate~

トリガー

ここからPower Automateフローを作成します

トリガーはPower Appsからファイルの中身を受け取れるように「ファイルコンテンツ」を指定します

ここで重要な注意点があります

必ず3点リーダーから「フィールドを必須にします」を指定しておきます

この設定が抜けるとうまく行きませんので確実に指定しましょう!

ファイル作成

次にファイル作成アクションを作成します

サイトのアドレスとフォルダーのパスには、ファイルの保管先を指定します

問題は次からです

まずファイル名です

こちらはそのまま以下をコピーしてください

triggerBody()[‘file’][‘name’]

コピー先は下の画像の「」の箇所ですので、間違いがないように注意をお願いします

コピー後は下のOKボタンを押します

すると以下のようになります

OKボタンを押した瞬間は上の画像のように、ファイル名が関数の表示になっています

こちらはフローを実行後は表示が変わるようになっています

画像に alt 属性が指定されていません。ファイル名: image-34.png

最後にファイルコンテンツを指定します

こちらはトリガーで受け取った内容を動的コンテンツから指定します

仕上げ~Power Apps~

それでは最後にPower Appsを仕上げます

Power Automateフローを動かすボタンを作成します

こちらのボタンでは、Power Automateフローに添付ファイルの内容を渡せるようにします

添付ファイルの内容は2つあります

こちらの2つの内容の渡し方が少し癖があります

下のように{}を使用します

UploadFile_Ver1.Run(   

     {     

      ①contentBytes:First( AttachmentFile.Attachments).Value,     

      ②name:First( AttachmentFile.Attachments).Name   

}

)

上記の①②の中身ですが、下の画像の名前を使用します

①contentBytes:First( AttachmentFile.Attachments).Value

②name:First( AttachmentFile.Attachments).Name

こちらの内容については、上記の内容をそのままコピーし、パーツ名だけを変更することをおすすめします

これで指定した箇所に、Power Appsを通じてファイルを保管できるようになります

<まとめ>

今回はPower Appsを通じてファイルを指定箇所にアップロードできるようにしました

そんなにアプリ作成には時間がかからないはずですが、何点か注意点があります

・Power Automate ⇒トリガーで必ず「必須」を指定する

・Power Automate ⇒ファイル作成アクションでファイル名を記事のコピーで作成する

・Power Apps ⇒Power Automateにファイル内容を渡す際、{}を使用して2つ引数を指定する

そのままアップロードしたエクセルファイルの内容をPower Apps内で使用する場合には、テーブルを事前に作成しておけば大丈夫です!

これでファイルの管理も楽になります

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

ガッツの日記 第7回 「エクセルとSharepointリスト」それぞれのいいとこどりをする方法

【今回の記事はデスクトップのエクセルの新たな活用方法の提案です】

ここ数年でSharePointリストなどのクラウドサービスを利用する人はかなり多くなってきています

クラウドはネットさえつながればどこでも使うことができ、特にSharepointリストは複数人でデータを共有して仕事するのに便利な機能が満載です

履歴の復元が行えたり、登録者や更新日時が確認できます

何より3000万行を蓄積できるのがいいです

エクセルはあくまで表計算ソフトであり、大量のデータを蓄積していくのには本来は向いてません

蓄積できる行数も1シート100万前後です

一方、使い慣れたデスクトップのエクセルをこれからも使用していきたいという方も多いと思います

特にVBAを使って業務を回してきたケースの場合は、そのままデスクトップのエクセルを継続的に使用せざる負えないです

ここからが本題です

実は、

Sharepointリストとデスクトップのエクセルを組み合わせて使用する方法があります

ADOという仕組みを使うと「Sharepointリストからエクセルへのデータ取得」「エクセルからSharepointリストへのデータ追加・更新」が自動で行えます

以前、私はこのADOを使用して「Accessとエクセル」を連携するシステムを開発したことがあります

この方法ならばAccessにデータを一元管理しながら、利用者各自のエクセルファイルにて作業を行うことができます

何が一番素晴らしいかというと、売上管理や商品管理などの各種エクセルにてマスタを共通利用できる点です

エクセルでデータ管理を行っていると、複数ファイルでのマスタの追加や更新などの処理が煩雑になりがちです

ADOを使用した仕組みの場合は、Accessにてマスタ管理を行えば、利用者の各種エクセルファイルにてマスタを自動でダウンロードして使いまわすことができます

今回の記事では、Accessの代わりにSharepointリストを使用するわけですが、クラウドで利用できる点なども含めてかなり効率的な仕組みができると考えています

VBAを使い込んでいた組織では、VBAを引き続き有効利用しながらクラウドを活用できるのも大きいです

以降の記事では、Sharepointリストの特徴なども交えながらデータ取得・追加・更新のサンプルコードを解説していきます

尚、今回の記事はVBA経験者を主な対象としていますのでその点は予めご了承ください

事前準備

ライブラリーの追加

ADOをVBAで使用する場合には、Visual Basicのツールタブ⇒参照設定からMicrosoft ActiveX Data Objectsライブラリを追加する必要があります

ここが抜けてしまうと、コードをいくら書いても動きませんので注意が必要です

サイトURL及びリストID

ADOを使用してSharepointリストをデータソースとして使用する場合は「サイトURL」と「リストID」を使用します

サイトURLについては分かりやすいと思います

上記画像の「sites」の後と「Lists」の前までがサイトURLです

リストIDは普段聞きなれないと思いますが、Sharepointリストの内部名のことです

今回の記事で使用するSharepointリストのリスト名は「Sales_Test」になりますが、別の名前/IDをADO内では使用します

リストIDの取得はこちらから行います

上の画像の「リストの設定」をクリックすると、次に開く画面でリストIDが取得できます

こちらの「%7B」と「%7D」の間がリストIDになります

共通構文

以下、サンプルコードを実際に解説していくわけですが、共通の部分があります

******

Dim objConnect As Object ‘ADODB.Connection
Dim recordSet As Object ‘ADODB.Recordset
Const Sharepointurl As String = ①”https://xxxx5.sharepoint.com/sites/TEST
Const listid As String = ②”b24faf63-1f23-xxxx-858e-278ead83f878

③Set objConnect = CreateObject(“ADODB.Connection”)
④objConnect.Open “Provider=Microsoft.ACE.OLEDB.16.0;WSS;IMEX=2;RetrieveIds=Yes;DATABASE=” & Sharepointurl & “;LIST=” & listid & “;”
⑤Set recordSet = CreateObject(“ADODB.Recordset”)

******

①②ではサイトURL、リストIDを設定します

③では、ADOとの接続を設定し、④で実際に①②のサイトURLとリストIDを通じて接続を行います

⑤では取得したレコード/行一式を格納する箱を設定します

Sharepointリストの列名を取得

本来であれば、早速データの取得のサンプルコードから紹介したいところなのですが、Sharepointリストの列名の取得から始めたいと思います

何故かと言うと、ここにSharepointリストの特徴の1つがあるからです

******

Sub getFields()
(共通)

With recordSet
①.Open “SELECT * FROM [Sales_TEST];”, objConnect
②.MoveFirst

Dim i As Long

③For i = 0 To recordSet.Fields.Count - 1

    ④Debug.Print recordSet.Fields(i).Name

⑤Next

   .Close

End With

objConnect.Close

End Sub

******

①にてレコードを該当Sharepointリストから取得し、②でレコードの最初に移動します

③~⑤でレコードの列名を繰り返し、イミディエイトウィンドウに表示します

取得した列名を見て頂くと、設定していない列が取得されます

ここがAccessと違うところです

一番上に出ているIDはレコードを追加すると「1,2,3・・・」と自動採番されます

このIDは今回もSharepointリストの更新で使用します

ちなみに、使用した接続やレコード一式は必ず閉じる/Closeするようにします

データの取得

Sharepointリストからデータを取得するには、2つの方法があり、列別に取得する方法とレコードセットを丸ごと取得する方法です。

列別

前述の列名で取得した「列名」をここで使用します

*太字の部分です

******

With recordSet
.Open “SELECT * FROM [Sales_TEST];”, objConnect
.MoveFirst

Dim i As Long

Do Until .EOF
  Debug.Print .Fields.Item("注文NO").Value
  .MoveNext
Loop

.Close

End With

objConnect.Close

******

一括

こちらは一括でSharepointリストからレコード一式をワークシートにコピーします

下のコードではSheet5のA2セルに一括でコピーしています

******

With recordSet
.Open “SELECT * FROM [Sales_TEST];”, objConnect

Worksheets("Sheet5").Range("A2").CopyFromRecordset recordSet

.Close

End With

objConnect.Close

******

もし、データが一行もない場合は「データが無かった旨」を表示できるようにすると便利です

.Open “SELECT * FROM [Sales_TEST];”, objConnect

If recordSet.BOF = True And recordSet.EOF = True Then
   recordSet.Close
   objConnect.Close
   MsgBox "該当するデータはありません。"
   Exit Sub
End If

データの追加

以下の①から⑧までを一式で使います

******

①recordSet.Open “[Sales_Test]”, objConnect, adOpenKeyset, adLockOptimistic

②objConnect.BeginTrans

③recordSet.AddNew
④recordSet.Fields("注文NO").Value = Worksheets("Sheet6").Cells(2, 1).Value
⑤recordSet.Fields("SalesAmount").Value = Worksheets("Sheet6").Cells(2, 2).Value

⑥recordSet.Update

⑦objConnect.CommitTrans

⑧recordSet.Close

******

①のadOpenKeysetadoLockOptimisticは他に指定する方法がありますが、こちらの方法であれば大概は問題ありません

④⑤で追加データをワークシートから読み込んでいます

追加データが複数行ある場合は「For ~ Next」内に③~⑥を入れてコードを書きます

そして最後に⑦を実行します

データの更新

前述のようにSharepointリストのIDを使用し、更新するレコードを指定するのがポイントです

ですので実際には、事前にレコードの取得をしておいてIDを特定できるようにする必要があります

******

objConnect.BeginTrans

①recordSet.Filter = "ID = " & Worksheets("Sheet7").Cells(2, 1).Value
recordSet.Fields("SalesAmount").Value = Worksheets("Sheet7").Cells(2, 2).Value
recordSet.Update

******

データの追加も同様ですが、接続が行えない場合は「ロールバック処理/もとに戻す」を行えるようようにしておくのがよいです

<まとめ>

今回はADOの仕組みにより、Sharepointリストからエクセルにデータ取得したり、エクセルからデータ追加・更新を行う方法を解説しました

今回紹介した内容は基本的な内容であり、実際には条件式を組み合わせるなど様々なパターンが考えられます

実はSharepointリストとADOにて接続する場合、1点厄介なことがあります

ADOで扱うSharepointリストに参照列が存在する場合です

上の画像の一番右、CustomerName列は参照列です

他のSharepointリストから参照しています

参照列をADOで取得すると、次の画像のように参照しているSharepointリストのIDに置き換わってしまいます

ですので、IDを変換する仕組みが必要になります

データ追加の時も、参照列がある場合には同様にIDを変換する仕組みが必要です

とにかくSharepointリストを扱う上では「ID」が非常に重要です

この点は強く意識しておきましょう!

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

SHAREPOINT/リストを直接POWER BIに取り込む方法

最近ではエクセルの代わりにSharepointのリストを活用するケースが多いと思います

Sharepointのリストも簡単にPower BIに取り込むことができます

今回の記事ではSharepointリストをPower BIに取り込む部分に絞って解説を行います

SharepointリストのサイトURLの取得

今回はSharepoint内の「SharepointPracticeサイト」というサイト内のリストからデータを取得します

取得するリストは点数というリストです

ただ必要なのはサイト自体のURLになります

https://XXXXXX.sharepoint.com/sites/SharepointPractice/⇒不要

Power BIでデータソースを取得

Sharepointの必要なURLを取得したので、Power BI Desktopで「データソース」を指定します

上の画像の一番下にある「詳細」を指定します

次に開いた画面で「Sharepoint」を検索します

ここで「SharePoint Onlineリスト」を指定し「接続」をクリックします

URLの指定

接続を指定した後に表示される画面で「URL」を指定します

URLの指定の他に2か所の指定が必要です

・実装 ⇒ 2.0

・詳細設定オプション ⇒ 既定-SharePointリストの”既定のビューに設定されている列を取得します”

詳細設定オプションを「既定・・・」に指定することで必要な列のみを取得することができます

そうでないと「更新日時」などの自動設定される列も取得することになります

(注意)接続という形で「サインイン」を求められる時があります。少しわかりずらいので注意が必要です

リストの指定

前の画面でURLを指定し、OKボタンを押すと次の画面が表示されます

指定したURL内にある「リスト」の一覧が表示されます

この一覧の中で該当のリストを指定します

すると、リストの内容がPower BIに取り込めます

<まとめ>

これからエクセルの代わりに「リスト」を使う機会が増えると思います

Power BIにデータを取り込むのに、いちいちエクセルに変換していたら非効率です

リストとPower BIの相性は抜群です

URLを指定するだけですので、この機会に取得法をおさせておきましょう

ちなみに、Sharepoint内のエクセルファイルを取り込む方法はこちらになります

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

SharePointにあるファイルを直接Power BIに取り込む方法

【ファイルを共有するのにSharePointを利用されている方も多いと思います。今回はSharePointにあるエクセルファイルを、ダウンロード処理なしに直接Power BI Desktopにデータ取得する方法を解説します!】

どこにいても情報にアクセスできるSharePointを利用するメリットはとにかく高いと思います

ただSharePointを使うメリットはそれだけにとどまりません

SharePointにあるファイルは複数ファイルでもPower BI Desktopで一括取得することができます

今回の記事では、SharePointにあるファイルデータのPower BIでの取得方法を「一括取得」「個別取得」にわけて2つ解説します

*Sharepointのリストを取得する場合はこちら

ポイント

一般的にはデータを取得するファイルを指定するには、クリック処理で該当ファイルを指定します

今回の記事では「コピー&ペースト」で指定します

「コピー」する場所は取得方法に応じて2つあります

1つ目はSharePointのサイトからコピーします

サイトのページの詳細をクリックすると「アドレスのコピー」が表示されますので、こちらをクリックします

2つ目は取得ファイルの「情報」からコピーします

SharePointサイト内のファイルを一括取得

アドレスのコピー

1つ目の取得方法では、SharePointのサイトの「アドレス」活用します

ポイントで前述したように、まずはサイトのアドレスをコピーします

コピーしたらメモ帳に貼り付けておきます

Power BI Desktopでデータ取得

ここからPower BI Desktopでの解説になります

データを取得では「SharePointフォルダー」を選択します

次に、画面下の「接続」をクリックするとサイトURLを指定する画面が出てきますので、空欄にメモ帳に貼り付けた内容をコピー&ペーストします

空欄にコピー&ペーストしたら、画面右下にあるOKボタンをクリックしてください

OKボタンのクリック後に遷移する画面では、サイト内にあるファイルが全て表示されます

この画面では、サイト内にサブフォルダーを作成していても、サイト内のファイルが全て表示されます

次に下のボタンから「データの変換」を選択してクリックします

サブフォルダのフィルタ

「データの変換」をクリックするとPower Querエディタが開きます

上の画像では、Folder Pathという列名が表示されていますが、こちらの列で取得するフォルダを「フィルタ」により指定します

M関数によるデータ成型

取得対象のフォルダのファイルに絞り込んだ後は、カスタム列作成画面を使用してM関数によりデータ成型を行います

使用するM関数は「Excel.Workbook」関数になります

上の画像のようにExcel.Workbook関数で「Content列」を処理する形になります

Excel.Workbook([Content])

すると、下の画像のように取得するファイル分の「Table」ができます

その後、下の画像のようにTableがある列以外の列を削除します

この後、Tableを展開すると「Sheet」と「Table」が混在している状態になっています

こちらを「Table」のみにフィルタします

ここで最後の展開処理を行います

後は必要な列以外を削除します

特定ファイルを取得

パスのコピー

特定ファイルをSharePointから取得する場合には、該当ファイルの情報から前述したようにパスのコピーをします

パスのコピーをしたらメモ帳にコピーしておきます

Power BI Desktopでデータ取得

ここからは1つ目のSharePointからの取得方法と同様です

ただ一つ注意点があります

メモ帳の内容をそのままコピーしても有効に機能しません

URLの拡張子以降の部分は削除してからOKボタンを押します

*もし、うまく行かない場合には取得先を「Web」からにしてやり直してみてください

<まとめ>

今回はSharePointからPower BI Desktopにデータを取得する方法を解説しました

取得方法は「一括取得」「個別取得」に分かれますが、いずれも「選択」でなく「コピー」により取得ファイルを指定します

とにかくファイル共有しやすいSharePointはファイル数を大量に扱うのに便利です

ぜひ今回のPower BIとの連携方法は有効活用してみてください

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ