0

こんにちは、データグリッドの値に基づいてExcelスプレッドシートに2つのワークシートを作成する次のものがあります。2つのデータグリッドで機能させることができますが、14のデータグリッドで行う必要があります。 ;

  var grid1Output = RadGridView1.ToExcelML();
  var grid2Output = RadGridView2.ToExcelML().Replace("Worksheet1", "Worksheet2");

  var workBook = grid1Output.Replace("</Worksheet>", "</Worksheet>" + 
       grid2Output.Substring(grid2Output.IndexOf("<Worksheet"), 
       grid2Output.IndexOf("</Worksheet")- grid2Output.IndexOf("<Worksheet")) + "        </Worksheet>");

上記は問題なく動作しますが、合計で 14 個のグリッド出力に対して実行する必要があります。私の問題は、適切な場所で文字列を置き換えるのに問題があることです。どうすればいいですか?

4

1 に答える 1

0

おそらく、文字列操作ではなく、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();

これが多少役立つことを願っています。

于 2012-09-29T17:36:41.887 に答える