现在已经有了单元格对象,我们来读取单元格数据:
- Excel.Range cell = (Excel.Range)range.get_Item(r, c); // 获取单元格对象
- if ( (bool)cell.HasFormula ) // 该单元格式为公式
- {
- // cell_elem为XmlElement对象
- cell_elem.SetAttribute("hasFormula", "true");
- cell_elem.SetAttribute("formula", cell.Formula.ToString()); // 获取公式内容
- cell_elem.SetAttribute("value", cell.Text.ToString()); // 注意:cell.Text为公式的计算结果+格式设置的结果,不一定等于公式表达式
- ....
- }
- // 单元格式的对齐方式
- switch ((int)cell.HorizontalAlignment) // 水平对齐方式
- {
- case (int)Excel.Constants.xlCenter: cell_elem.SetAttribute("align", "center"); break; // 居中
- case (int)Excel.Constants.xlLeft: cell_elem.SetAttribute("align", "left"); break; // 靠左
- case (int)Excel.Constants.xlRight: cell_elem.SetAttribute("align", "right"); break; // 靠右
- default: cell_elem.SetAttribute("align", ""); break; // 默认
- }
- switch ((int)cell.VerticalAlignment) // 垂直对齐方式
- {
- case (int)Excel.Constants.xlTop: cell_elem.SetAttribute("valign", "top"); break; // 置顶
- case (int)Excel.Constants.xlCenter: cell_elem.SetAttribute("valign", "middle"); break; // 居中
- case (int)Excel.Constants.xlBottom: cell_elem.SetAttribute("valign", "bottom"); break; // 置底
- default: cell_elem.SetAttribute("valign", ""); break; // 默认
- }
- // 字体属性
- {
- Excel.Font font = cell.Font; // 注意:对字体的引用会产生计数,不要忘了销毁它
- cell_elem.SetAttribute("font-family", font.Name.ToString()); // 字体名称
- if (font.Color.GetType() != typeof(System.DBNull)) // 颜色有可能为空值
- {
- colorVal = (int)(double)font.Color; // 转换一下
- colorVal = colorVal >> 16 | colorVal & 0xFF00 | colorVal << 16; // 原来是以BGR方式,需要转换成RGB方式
- }
- else
- colorVal = 0; // 黑色
- cell_elem.SetAttribute("font-color", string.Format("#{0:X2}{1:X2}{2:X2}", colorVal & 0xFF, (colorVal >> 8) & 0xFF, (colorVal >> 16) & 0xFF)); // 转换成#RRGGBB的方式,用于HTML元素
- cell_elem.SetAttribute("font-italic", font.Italic.ToString()); // Font.Italic类型为布尔型
- cell_elem.SetAttribute("font-bold", font.Bold.ToString()); // 同上
- cell_elem.SetAttribute("font-size", font.Size.GetType() != typeof(System.DBNull) ? // 字体尺寸为pt(point)
- font.Size.ToString() + "pt" : "12pt");
- cell_elem.SetAttribute("font-strikethrough", font.Strikethrough.ToString()); // 中心划线
- releaseComObject(font); // 释放
- font = null;
- }
- // 处理单元格合并
- if ((bool)cell.MergeCells) // 是否为合并的单元格?
- {
- Excel.Range ma = (Excel.Range)cell.MergeArea; // 获取合并区域
- Excel.Range macol = ma.Columns; // 合并包含的行
- Excel.Range marow = ma.Rows; // 合并包含的列
- cell_elem.SetAttribute("rowspan", marow.Count.ToString()); // 行跨度
- cell_elem.SetAttribute("colspan", macol.Count.ToString()); // 列跨度
- cell_elem.SetAttribute("width", ma.Width.ToString() + "pt"); // 区域的尺寸
- cell_elem.SetAttribute("height", ma.Height.ToString() + "pt");
- releaseComObject(marow); marow = null; // 收尾工作一定要做
- releaseComObject(macol); macol = null;
- releaseComObject(ma); ma = null;
- ....
- }
- else
- { // 没有合并
- cell_elem.SetAttribute("colspan", "1"); // 普通跨度
- cell_elem.SetAttribute("rowspan", "1");
- cell_elem.SetAttribute("width", cell.Width.ToString() + "pt"); // 不同的尺寸
- cell_elem.SetAttribute("height", cell.Height.ToString() + "pt");
- ....
- row_elem.AppendChild(cell_elem); // XML操作插入单元格到列元素
- releaseComObject(cell); // 释放
- cell = null;