COM 相互運用機能を使用して Excel スプレッドシートから画像を抽出するアプリケーションを作成しています。
ファイルを Excel 2010 から XLS (2003 形式) として保存すると問題なく動作しますが、XLSX (2007 ~ 2010 形式) として保存すると、「サーバーが例外をスローしました。(HRESULT からの例外: 0x80010105)」という例外が生成されます。 (RPC_E_SERVERFAULT))」
私のコードは以下です。例外は行 pic.Copy(); によってスローされます。これは、XLS で問題なく動作します。
public static BitmapSource[] ImportImages(string FileName)
{
//Create the Excel Object
ExcelObj = new Microsoft.Office.Interop.Excel.Application();
//Create the Workbooks wrapper
Workbooks workbooks = ExcelObj.Workbooks;
//Open the Excel workbook
Workbook workbook = workbooks.Open(FileName);
//Reference the worksheets in the Excel file
Sheets sheets = workbook.Worksheets;
List<BitmapSource> images = new List<BitmapSource>();
List<Picture> pics = new List<Picture>();
//Reference the first sheet in the workbook
Worksheet sheet = sheets[1];
for (int i = 1; i < 30; i++)
{
pics.Add(sheet.Pictures(i));
}
foreach (Picture pic in pics)
{
pic.Copy();
if (Clipboard.ContainsImage())
{
images.Add(Clipboard.GetImage());
}
Marshal.ReleaseComObject(pic);
}
Marshal.ReleaseComObject(sheet);
Marshal.ReleaseComObject(workbooks);
Marshal.ReleaseComObject(workbook);
Marshal.ReleaseComObject(sheets);
ExcelObj.Quit();
Marshal.ReleaseComObject(ExcelObj);
return images.ToArray();
}
なぜこれが起こっているのですか?プロジェクトで 2003 年と 2007/2010 年をサポートできる必要があります。
ありがとう