■87286 / inTopicNo.4) |
Re[3]: 既に開いているエクセルファイルを操作する方法 |
□投稿者/ Atata!! (4回)-(2018/05/03(Thu) 19:52:38)
|
> BindToMonikerも同じかもしれませんが、
MSDN に記述のある通り Marshal.BindToMoniker と GetObject は同じ機能になります。
https://msdn.microsoft.com/ja-jp/library/system.runtime.interopservices.marshal.bindtomoniker(v=vs.110).aspx
Office 2003 以前では先に挙げられた KB のような対応が必要になることがあります。
Office 2003 より後の Excel は、ほぼ起動直後にファイル(モニカ)を ROT に登録するので
以下のコードのように優先度を下げるとかしないと問題を発生させにくいかもしれません。
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using uExcel = Microsoft.Office.Interop.Excel;
namespace エクセル
{
class Program
{
static void Main(string[] args)
{
OpenExcel();
}
public static void OpenExcel()
{
var myExcelFilePath = Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\Desktop\XXX.xlsx");
// Excel のプロセス優先度を下げて起動する。
var psi = new ProcessStartInfo("CMD.EXE" , String.Format(@"/C START """" /BELOWNORMAL Excel.exe /E ""{0}""", myExcelFilePath));
using (var p = Process.Start(psi))
{
p.WaitForExit(10);
var workbook = Marshal.BindToMoniker(myExcelFilePath) as uExcel.Workbook;
workbook.Close(false);
Marshal.FinalReleaseComObject(workbook);
}
}
}
}
|
|