前提・実現したいこと
C#側の処理を用いてxmlファイルのタグの属性を動的に変更したいです。
発生している問題・エラーメッセージ
xmlファイルの読み込みまではうまくいくが、書き込みの際に例外エラーが発生し、
xmlファイルへの書き込みが反映されない状態となっています。
現在はlabel属性の動的な追加(書き換え)を目標にしているがOnActionというイベントも動的に追加したいと考えています。
書き込みの部分をどう記述すればいいかわからないので有識者の方がいましたら教えていただきたいです。
下記のソースコードと全く違う書き方になってしまうのであればソースも教えていただきたいです。
System.InvalidOperationException: 'シーケンスに要素が含まれていません'
該当のソースコード
C#
1 public void Ribbon_Load(Office.IRibbonUI ribbonUI) 2 { 3 this.ribbon = ribbonUI; 4 //xml読み込み 5 XElement xml = XElement.Load(@"C:\Users\信一郎\source\repos\ExcelAddIn2\ExcelAddIn2\Ribbon1.xml"); 6 7 //xmlファイルが正常に読み取れているかstring型にしてメッセージ表示 8 string hoge = xml.ToString(); 9 System.Windows.Forms.MessageBox.Show(hoge); 10 11 //例外エラーの発生元 12 XElement info = (from item in xml.Elements("button") 13 where item.Attributes("label").ToString() == "test" 14 select item).Single(); 15 //ここまで 16 17 //label属性の書き換え 18 info.Attribute("label").Value = "aaaaa"; 19 //保存 20 xml.Save(@"C:\Users\信一郎\source\repos\ExcelAddIn2\ExcelAddIn2\Ribbon1.xml"); 21 22 23 24 } 25 public void click_Event(Office.IRibbonControl control) 26 { 27 System.Windows.Forms.MessageBox.Show("ボタンが押されました"); 28 }
xml
1<?xml version="1.0" encoding="UTF-8"?> 2<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load"> 3 <ribbon> 4 <tabs> 5 <tab idMso="TabAddIns"> 6 <group id="MyGroup" 7 label="My Group"> 8 <button id="btniId" label="test" onAction="click_Event"></button> 9 </group> 10 </tab> 11 </tabs> 12 </ribbon> 13</customUI> 14
試したこと
XElement info = (from item in xml.Elements("button") where item.Attributes("label").ToString() == "test" select item).Single();の.SingleをSingleOrDefault()に変更した。
すると
System.NullReferenceException: 'オブジェクト参照がオブジェクト インスタンスに設定されていません。'info が null でした。
という例外エラーに変化した。
発生元のソースコードも info.Attribute("label").Value = "aaaaa";に変化した。
補足情報(FW/ツールのバージョンなど)
VisualStudio 2019
Excel 2016
.NetFramework 4.7.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/08/04 21:55
2021/08/05 02:48
退会済みユーザー
2021/08/05 04:08
2021/08/05 04:32
退会済みユーザー
2021/08/05 10:46