紺碧の関数で動作するように C# で関数を作成しましたが、最初は次のメッセージが表示されました。
System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
インターネットで調べたところ、Azure Function が Excel Interop dll で動作せず、これを実現する方法として OpenXml SDK を使用していたため、OpenXml メソッドを作成したとのことでした。
public static void AddImage(string filepath, string imagepath)
{
using (SpreadsheetDocument spreadsheet = SpreadsheetDocument.Open(filepath, true))
{
WorkbookPart wb = spreadsheet.WorkbookPart;
string sheetName = "sheet2";
string relId = wb.Workbook.Descendants<Sheet>().First(s => sheetName.Equals(s.Name)).Id;
WorksheetPart wp = (WorksheetPart) wb.GetPartById(relId);
DrawingsPart drawingsPart1 = wp.AddNewPart<DrawingsPart>();
ImagePart imagePart = drawingsPart1.AddImagePart(ImagePartType.Gif);
using (FileStream stream = new FileStream(imagepath, FileMode.Open))
{
imagePart.FeedData(stream);
}
GenerateDrawingsPart1Content(drawingsPart1, drawingsPart1.GetIdOfPart(imagePart));
Worksheet worksheet = wp.Worksheet;
Drawing drawing1 = new Drawing() { Id = wp.GetIdOfPart(drawingsPart1) };
worksheet.Append(drawing1);
spreadsheet.Close();
}
}
彼が到達するまではうまくいきます:
DrawingsPart drawingsPart1 = wp.AddNewPart<DrawingsPart>();
そして今、私はこのエラーを受け取り続けています:
"Only one instance of the type is allowed for this parent."
エラーを修正するための提案はありますか? Azure Functions で OpenXml または Excel Interop を使用する以外の関数で "Excel に画像を挿入" する別の方法はありますか?