おそらく、文字列操作ではなく、Linq for XML メソッドを使用することになるでしょうが、選択はあなた次第です。
いずれにせよ、グリッド出力 (文字列であると想定しています) を取得し、内容を抽出して返すメソッドを作成するのは、それほど難しいことではありません。呼び出しルーチンは、14 個の XML 文字列を組み立てて、1 つの Worksheet タグにラップします。
ここでそれを突き刺します。私は RadGridView と ToExcelML の出力に詳しくないので、おそらくこのコードを変更しないと使用できないことを覚えておいてください。私は、有効ではないかもしれないいくつかの仮定をしています。
まず、XML 文字列を入力として受け取るメソッドを作成します。この文字列は <Worksheet n > タグで完全にラップされていると想定しています。
string ExtractWorksheetContents(string excelML, int index)
{
// You might also be able to do this with a regex, depending on how the contents are structured
// Since I don't know enough about the content, I will do this with string manipulation, as
// you did, rather than loading the XML and making assumptions.
string tagName = string.Format("Worksheet{0}", index);
int worksheetStart = excelML.IndexOf("<" + tagName);
int worksheetEnd = excelML.IndexOf("</" + tagName + ">") + tagName.Length + 3);
// Should contain some checks that neither w'sheet start nor end are -1
return excelML.Substring(worksheetStart, worksheetEnd-worksheetStart);
}
次に、結果をまとめます。ここでも、XML がどのように構造化されているかについて推測しています。
StringBuilder sb = new StringBuilder();
sb.Append("<Worksheet>");
RadGridView[] gridViews = new RadGridView[] { RadGridView1, RadGridView2 .... RadGridView14 };
for(int i=0;i<14; i++)
{
var rgv = gridViews[i];
sb.Append(ExtractWorksheetContents(rgv.ToExcelML(),i+1));
}
sb.Append("</Worksheet>");
var workBook = sb.ToString();
これが多少役立つことを願っています。