質問: ### 前提・実現したいこと Excelに列追加を行った際に、配置されているシェープを連動して移動させたい。 ClosedXMLでは無理そうなので、OpenXMLを使うことを検討しています。 最悪COMオブジェクトを使えばできそうですが、それは最後の手段かなぁと思っています。 以下、イメージで、B列に列挿入を行った際に、配置されているシェープを1列分右に移動させたい。 ![![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/d1abf0d17df16e3058e93dd6354c9ba5.jpeg)] 1OpenXMLで上記のような事は可能でしょうか? 2もし可能であればどういったソースになりますでしょうか? よろしくおねがいします。 ### 発生している問題・エラーメッセージ ClosedXMLでB列に挿入を行うと、列挿入は可能だがシェープは移動してくれない。 また、以下よりClosedXMLから直接シェープをいじることはできなそう なので、ClosedXMLでの対応は断念しました
回答: ググっただけですが、以下の回答の中に Add Columns to Existing Excel 2007 workbook using Open Xml > > "Inserting" a column like you mean is a very large and complex task with OpenXmlSDK. > > > From my understanding of the problem, it means you will have to find all cells and shift them by changing their reference (ex. a cell with ref "B1" would become "F1" after inserting 3 columns, etc ...). And it means you will have to change a lot of other things (reference of cell in formulas for example). > > > This kind of task could be easily done with Office.Interop or probably with libraries like EEPlus or ClosedXml. > > > とあり、適当に翻訳すると > > あなたが言っているように列を "挿入"することは、OpenXmlSDKでは非常に大きく複雑な作業です。 > > > 私が問題を理解したことから、それはあなたがすべてのセルを見つけてそれらの参照を変えることによってそれらをシフトしなければならないことを意味します(例えば、参照 "B1"のセルは3列挿入後に "F1"になるでしょう、など)そしてそれはあなたが他の多くのことを変更しなければならないだろうことを意味します(例えば式のセルの参照)。 > > > この種の作業は、Office.Interopを使って、あるいはおそらくEEPlusやClosedXmlのようなライブラリを使って簡単に行うことができます。 > > > となります。 最悪のCOMとおっしゃっている方法が一番現実的なのかと予想されます。 もしくはEEPlus(EPPlusの間違い?)も試してみてはいかがでしょうか。 追記: EPPlusも実験してみましたが、 `sheet.InsertColumn(1, 1);`という感じでお手軽に列の挿入は可能でした。 しかし、図形は自動で動かないので、何らかの対策が必要かと思われます。