一 引言
本文主要介绍向Excel中插入文本和图片的方法。相信大家对Excel的模型对象都有了一定的了解,和Word相似,Excel中插入文本和图片也需要依靠Range对象。但是与Word对象不同,Excel的Range对象实际上指的是Excel单元格的范围,而非Word的一段字符的范围。在实验之前,我们还是在D盘新建一个名叫Test.xlsx的Excel文件作为本次试验的对象,下面就向Excel中插入文本和图片分别进行介绍。二 插入文本
1.1 获取Range对象
参照上一文的内容我们打开D:\\Test.xlsx文档,然后获取sheet对象:Application app = new.Application();
app.Visible = true;
Workbook book = app.Workbooks.Add("D:\\Test.xlsx");
Worksheet sheet = book.Worksheets[1];
通过sheet对象的get_Range()方法,我们可以获取需要插入文本的Range对象:
Range range = sheet.get_Range("B2", "C4");
get_Range()接收两个参数,分别是起始单元格的位置和结束单元格的位置,上述语句我们获得了一个从B2到C5的4行2列的Range
1.2 写入文本
在写入文本之前,我们需要先准备一个要插入的数据源:System.Data.DataTable dt = new System.Data.DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Marks");
DataRow row1 = dt.NewRow();
row1["Name"] = "Tom";
row1["Marks"] = "96";
dt.Rows.Add(row1);
DataRow row2 = dt.NewRow();
row2["Name"] = "Jerry";
row2["Marks"] = "91";
dt.Rows.Add(row2);
DataRow row3 = dt.NewRow();
row3["Name"] = "Pooly";
row3["Marks"] = "100";
dt.Rows.Add(row3);
接下来我们利用二层循环向Range中插入数据:
for (int i = 0; i < dt.Rows.Count;i++ )
{
for (int j = 0; j < dt.Columns.Count;j++ )
{
range[j+1][i+1] = dt.Rows[i][j];
}
}
这里需要特别注意的是range对象利用[]操作符来取每个单元格,但是range[][]的顺序是range[列号][行号],如果不出意外,在表格中会出现以下数据:
1.3 设置文本格式
下面介绍下设置Excel中文本格式的方法,由于格式的种类很多但是基本的设置方法是一样的,这里只列举几种常用的格式。
设置文本字体。
把字体设置成微软雅黑并加粗。range.Font.Name = "微软雅黑";
range.Font.Bold = true;
设置单元格合并
合并B1到C1的单元格,并填写文本“成绩单”:
Range range1 = sheet.get_Range("B1", "C1");
range1.Merge();
range1[1][1] = "成¨¦绩¡§单Ì£¤";
设置表格框线
range.Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlDash;
设置居中
range.VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;//垂直居中
range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;//水平居中
经过上面的设置之后,excel变成下面的样子:
三、插入图片
利用WorkSheet的Shapes属性可以插入图片,该属性和Word中的InnerShapes类似,我们也可以利用它来插入图表等等。在插入图片之前,我们还是需要使用range的Select()方法定位当前的鼠标位置。
range1.Select();
sheet.Shapes.AddPicture("D:\\Test.jpg", MsoTriState.msoFalse,MsoTriState.msoTrue, 10, 10, 150, 150);
执行过后,效果如下:
四、操作批注
4.1 获取所有批注:
Excel.Comments comments = sheet.Comments
4.2 获取批注的内容:
string content = comment.Text();
或者
content = comment.Shape.AlternativeText;
4.3 获取被批注的单元格
Excel.Range range = comment.Parent.Cells[1];
Github位置:
https://github.com/HymanLiuTS/OfficeTestByC-
克隆本项目:
git clone git@github.com:HymanLiuTS/OfficeTestByC-.git
获取本文源代码:
git checkout L12