Asp.net 如何在SpreadsheetML中指定合并的单元格
我正在尝试使用SpreadsheetML生成Excel报表服务器端并通过浏览器下载报表。我有一切工作,并得到我需要下载的文件。然而,当我试图合并我正在创建的一张图纸中的单元格时,我遇到了一个问题。我在网上找到了两种不同的语法,并尝试了两种都没有成功。我将文件另存为.xml文件,将正常打开并显示预期的数据,但单元格未合并 第一种语法在元素上使用“mergeCross”限定符,并将指定的单元格数合并到当前单元格中。第二个语法使用元素。我在下面粘贴了两次尝试的实际xml代码。如果我能弄清楚XML应该是什么,那么我就可以通过编程轻松地创建它 版本1Asp.net 如何在SpreadsheetML中指定合并的单元格,asp.net,excel,openxml,Asp.net,Excel,Openxml,我正在尝试使用SpreadsheetML生成Excel报表服务器端并通过浏览器下载报表。我有一切工作,并得到我需要下载的文件。然而,当我试图合并我正在创建的一张图纸中的单元格时,我遇到了一个问题。我在网上找到了两种不同的语法,并尝试了两种都没有成功。我将文件另存为.xml文件,将正常打开并显示预期的数据,但单元格未合并 第一种语法在元素上使用“mergeCross”限定符,并将指定的单元格数合并到当前单元格中。第二个语法使用元素。我在下面粘贴了两次尝试的实际xml代码。如果我能弄清楚XML应该是
<?xml version='1.0'?>
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
<ss:Worksheet ss:Name='Distribution List Overview'>
<ss:Table>
<ss:Row>
<ss:Cell mergeAcross="2"><ss:Data ss:Type="String">First Cell Entry</ss:Data></ss:Cell>
<ss:Cell><ss:Data ss:Type="String">Third Cell</ss:Data></ss:Cell>
</ss:Row>
</ss:Table>
</ss:Worksheet>
</ss:Workbook>
第一单元输入
第三单元
版本1
<?xml version='1.0'?>
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
<ss:Worksheet ss:Name='Distribution List Overview'>
<ss:Table>
<ss:Row>
<ss:Cell><ss:Data ss:Type="String">First Cell Entry</ss:Data></ss:Cell>
<ss:Cell><ss:Data ss:Type="String">Third Cell</ss:Data></ss:Cell>
</ss:Row>
</ss:Table>
<mergeCells count="2">
<mergeCell ref="A1:B1"/>
</mergeCells>
</ss:Worksheet>
</ss:Workbook>
第一单元输入
第三单元
上述两种方法都无法创建合并单元。我希望得到“第一个单元格条目”,用单元格C1中的“第三个单元格”填充单元格A1和B1。相反,我在单元格A1中得到“第一个单元格条目”,在单元格B1中得到“第三个单元格”。如有任何帮助或建议,将不胜感激。这是使一些遗留代码正常工作所需的唯一剩余项,我不想将整个报告转换为OpenXML SDK代码。尝试用
ss:mergecross
替换mergecross
。换句话说,使用:
<ss:Cell ss:MergeAcross="2"><ss:Data ss:Type="String">First Cell Entry</ss:Data></ss:Cell>
第一个单元格条目
此外,您可能会注意到,要获得“A1:B1”合并单元格,您需要将
ss:mergeovers
值设置为1,而不是2。马里奥的答案仍然是这个问题的正确答案
然而,由于有相当多的流量碰到这个问题,我想我应该为一些额外的操作添加一些示例代码,这些操作是我在编写此报告时必须挖掘的
下面是一个如何将样式信息添加到文件的示例。在工作簿元素之后立即向文件中添加一个如下所示的块
<?xml version='1.0'?><ss:Workbook xmlns:ss='urn:schemas-microsoft-com:office:spreadsheet'>
<ss:Styles>
<ss:Style ss:ID='1'>
<ss:Font ss:Bold='1'/>
<ss:Alignment ss:Horizontal='Center'/>
</ss:Style>
</ss:Styles>
<ss:Worksheet ss:Name='Distribution List Overview'>
定义了一种样式,用于设置粗体字体大小并将每个单元格中的文本水平居中。您似乎能够向块中添加任意数量的样式参数,并且应该能够指定Excel支持的几乎任何内容。您必须进行一些研究,以找出正确的元素名称,但它们似乎与Excel命令非常相似,因此猜测并不像听起来那么难
通过将样式描述符追加到目标元素,可以将其添加到单元格或行中,如下所示
<ss:Cell ss:StyleID='1'>
要指定水平对齐和换行文本,请在“ss:Styles”和“/ss:Styles”元素之间声明另一个样式块,并为其指定唯一标识符
<ss:Style ss:ID='3'>
<ss:Alignment ss:Vertical='Bottom' ss:WrapText='1'/>
</ss:Style>
可以使用以下样式结构创建边框
<ss:Style ss:ID='4'>
<ss:Font ss:Bold='1'/>
<ss:Borders>
<ss:Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/>
<ss:Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/>
<ss:Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/>
<ss:Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/>
</ss:Borders>
当指定给单元格时,这会将文本字体设置为粗体,并以正常权重在所有边上应用边框。调整“权重”参数以使边框更粗体
最后,我花了相当长的时间研究如何将多个记录添加到单个单元格中。据我所知,不能在单元格内嵌套表,因此我必须找出如何对alt enter进行编码,以在单元格内生成换行符。这需要一个自定义样式以及一些要内联插入的特殊文本。您需要如我上面所示启用换行,然后使用“
”字符串分隔行。下面的块将使用上面指定的示例样式在两行上的指定单元格中显示两个名称
<ss:Cell ss:StyleID='3'>
<ss:Data ss:Type='String'>Jane Doe
Janet Doe</ss:Data>
</ss:Cell>
珍妮·多伊
珍妮·多伊
我还没有找到一种将多种样式应用于单个元素的方法,因此我必须创建几种样式,有些样式差异很小,并为每个单元格指定正确格式化所有内容所需的特定样式ID。例如,我必须创建一个带有普通文本和普通边框的样式,一个带有粗体文本和普通边框,另一个带有粗体文本和粗体边框,因为我无法找到一种方法来分别应用字体和边框的权重。这正是我所需要的。谢谢我会将此标记为回答者最终找到了指向SpreadsheetML参考文档的链接。