嗨我有以下内容根据数据网格中的值在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次网格输出。我的问题是,我在正确的地方更换字符串时遇到了麻烦。我该怎么做?
答案 0 :(得分:0)
我可能会使用Linq来处理XML方法而不是字符串操作,但选择权在你手中。
无论哪种方式,编写一个接受网格输出的方法(我假设它是一个字符串),提取内容并返回它们应该不难。然后,调用例程汇编了14个XML字符串,并将它们包装在单个Worksheet标记中。
这是一个刺痛。请记住,我不熟悉RadGridView和ToExcelML的输出,因此如果不进行一些修改,您可能无法使用此代码。我做了一些可能无效的假设。
首先,我将创建一个以XML字符串作为输入的方法。我假设这个字符串完全包含在&lt; Worksheet n &gt;标签
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();
希望这会有所帮助。