我可能会使用 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();
希望这会有所帮助。