@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

[C# VSTO] ServerDocumentを使ったデータのキャッシュについて

1
投稿者投稿内容
愛犬家
会議室デビュー日: 2007/03/20
投稿数: 2
投稿日時: 2007-03-20 20:28
はじめまして。

画面よりVSTOで作成したExcelファイルを呼び出し、
編集を加えるという処理を考えています。
その際、Excelファイルへのデータの受け渡しを行おうと思い、
ServerDocumentクラスを使う事を考えました。

以下、ソースです。
−−−−−−−−−−−−−−−−−
<呼び出し側>
コード:

private void button2_Click(object sender, EventArgs e)
{
// 渡すデータ
string name = "test";

ServerDocument serverDocument = new ServerDocument(@"D:/test/ExcelOutputVSTO.xls");
CachedDataHostItem hostItem = serverDocument.CachedData.HostItems["ExcelOutputVSTO.ThisWorkbook"];
CachedDataItem dataItem = hostItem.CachedData["Name"];
dataItem.SerializeDataInstance(name);
serverDocument.Save();
serverDocument.Close();

// VSTOで作成したExcelファイルの起動
Process.Start(@"D:\test\ExcelOutputVSTO.xls");
}



<呼び出され側>
コード:

#region プロパティ
private string name = String.Empty;
[Cached]
public string Name
{
set { name = value; }
get { return name; }
}
#endregion

private void ThisWorkbook_Startup(object sender, EventArgs e)
{
MessageBox.Show("SetName: " + this.name);
}


−−−−−−−−−−−−−−−−−

上記を実行する事で、呼び出される側(Excelファイル)の「name」に
データがセットされていると思ったのですが、
実際はされていませんでした。

設定方法、取得方法に問題があるのでしょうか?
ご存知の方がいらっしゃいましたら、ご教示の程宜しくお願い致します。

[ メッセージ編集済み 編集者: 愛犬家 編集日時 2007-03-22 12:00 ]
ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2007-03-27 20:00
こんばんは。

愛犬家さんのコードを手元の環境にコピペして走らせると問題なく動作します。
MessageBox に "test" が渡ります。
data cache の扱い方に問題はないと思います。
_________________
上本亮介 (ue) @ わんくま同盟
Microsoft MVP for VSTO (Jul 2008 - Jun 2009)
Hello Another World!
.NET 勉強会 / ヒーロー島
愛犬家
会議室デビュー日: 2007/03/20
投稿数: 2
投稿日時: 2007-03-28 13:59
ご回答ありがとうございます。

確かに問題なく動作しました。すいません。

なぜデータがセットされていなかったかを調査した所、
「呼び出され側」に“name”以外のキャッシュ対象を宣言しており、
そこへ何も設定していなかった為にキャッシュそのものが消えてしまった(?)ようです。

例えば
コード:
private string name = String.Empty;
[Cached]
public string Name
{
    set { name = value; }
    get { return name; }
}

private string hoge = String.Empty;
[Cached]
public string Hoge
{
    set { hoge = value; }
    get { return hoge; }
}



というようにキャッシュ対象だけを増やしておき、
呼び出す側のソースはそのままで実行すると、
なぜか渡せていた“test”の文字列も空白になってしまっていました。

差し当たり問題点は解決したので業務に支障は無いのですが、
何か腑に落ちません。。。
私のdata cacheの認識が間違っているのでしょうか。
1

スキルアップ/キャリアアップ(JOB@IT)