UiPathでExcelを操作する(活用編: 名前を付けて保存する[完成版])
UiPathでExcelを自由に操作する(活用編: 名前を付けて保存する)[完成版]
概要
前回の記事名前を付けて保存するについてご紹介しました。
https://qiita.com/takusonix/items/6e5a54cfe020b0f3a84c
しかし、新規に保存する場合は成功しましたが下図のように、上書き保存などには対応しておりません。
この記事では、警告を無視して強制的に名前を付けて保存する方法をご紹介します。
お約束事項(免責事項)
- この記事は2020年6月時点の情報を基に作成しております。
- 記事の内容は私個人の見解であり、所属する組織の公式見解ではありません。
スキル
この記事には、C#によるカスタムアクティビティの開発が含まれます。
カスタムアクティビティの開発方法は、UiPath公式のドキュメントを参照ください。
(本記事では最低限のみ記載します。)
https://docs.uipath.com/activities/lang-ja/docs/creating-a-custom-activity
必要なソフトウェア
- Visual Studio
- Nuget または Nuget Package Explorer
- Microsoft Office
警告アラートの正体
上記の名前を付けて保存の確認の正体は、"DisplayAlert"と呼ばれるものです。
公式のドキュメントに記載の通り、DisplayAlertの既定値はTrue
なっています。
そのため、公式ドキュメントの注釈の通り、DisplayAlertをTrue
からFalse
に変更します。
https://docs.microsoft.com/ja-jp/office/vba/api/excel.application.displayalerts
前回の実装
前回のソースコードはこちらです。
DisplayAlertはWorkbookではなく、Applicationのクラスに含まれているため、WorkbookからApplidationを取得する必要があります。
using Microsoft.Office.Interop.Excel;
using System;
using System.Activities;
using System.ComponentModel;
namespace UiPathCustomLibrary
{
public class SaveAs : CodeActivity
{
[Category("Input")]
[RequiredArgument]
public InArgument<Object> WorkbookApplication { get; set; }
[Category("Input")]
public InArgument<Object> FileName { get; set; }
protected override void Execute(CodeActivityContext context)
{
object workbookapp = WorkbookApplication.Get(context);
Workbook workbook = workbookapp.GetType().GetProperty("CurrentWorkbook").GetValue(workbookapp) as Workbook;
workbook.SaveAs(Filename: FileName.Get(context), FileFormat: XlFileFormat.xlOpenXMLWorkbook, CreateBackup: false);
}
}
}
WorkbookからApplicationの取得
Workbookについて公式のドキュメントを確認します。
https://docs.microsoft.com/ja-jp/office/vba/api/excel.workbook
すると、プロパティにApplicationが存在しましたので、このプロパティからApplicationを取得することが可能です。
https://docs.microsoft.com/ja-jp/office/vba/api/excel.workbook.application
実装
using Microsoft.Office.Interop.Excel;
using System;
using System.Activities;
using System.ComponentModel;
namespace UiPathCustomLibrary
{
public class SaveAs : CodeActivity
{
[Category("Input")]
[RequiredArgument]
public InArgument<Object> WorkbookApplication { get; set; }
[Category("Input")]
public InArgument<String> FileName { get; set; }
protected override void Execute(CodeActivityContext context)
{
// 引数(InArgument)より、WorkbookApplicationのオブジェクトを取得する
// WorkbookApplicationの属性に必須(RequireArgument)を指定しているため、workbookappのnullチェックは不要
object workbookapp = WorkbookApplication.Get(context);
// WorkbookApplicationから、Microsoft.Office.Interop.Excel.Workbook型として(キャストして)、CurrentWorkbookを読み込む
Workbook workbook = workbookapp.GetType().GetProperty("CurrentWorkbook").GetValue(workbookapp) as Workbook;
// WorkbookのプロパティからApplicationを取得する
Application application = workbook.Application;
// 変更前のDisplayAlertを保持する
bool prevDisplayAlert = application.DisplayAlerts;
// DisplayAlertを一時的にFalseにする
application.DisplayAlerts = false;
// 名前を付けて保存する
workbook.SaveAs(Filename: FileName.Get(context), FileFormat: XlFileFormat.xlOpenXMLWorkbook, CreateBackup: false);
// DisplayAlertを元に戻す
application.DisplayAlerts = prevDisplayAlert;
}
}
}
実行確認
Nuget Package Explorerで作成したライブラリをUiPath Studioでインストールした後、早速使ってみます。
「c:\tmp\Sample2.xlsx」として名前を付けて保存します。
※ 保存先は絶対パスで指定してください。
Author And Source
この問題について(UiPathでExcelを操作する(活用編: 名前を付けて保存する[完成版])), 我々は、より多くの情報をここで見つけました https://qiita.com/takusonix/items/d8070b61c06900d75c92著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .