0

嗨,我有以下内容,它根据数据网格中的值在 Excel 电子表格中创建两个工作表,我能够让它为两个数据网格工作,但是我需要为 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 字符串并将它们包装在单个 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 回答