--写入Excel表--
该例首先从数据库aq中读取学生信息表staq(参考数据库章节),然后将学生信息表中的数据写入Excel表格中
(1)在OfficeOperator类库项目的ExcelOperator类中定义索引器,用于获取Excel表格中的单元格,代码如下:
public Range this[object indexRow, object indexColumn]
{
get { return ExcelWorksheet.Cells[indexRow, indexColumn]; } //返回指定单元格
}
using Microsoft.Office.Interop.Excel; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace OfficeOperator2 { public class ExcelOperator { public Application ExcelApplication; //Excel应用对象 public Workbook ExcelWorkbook; //Excel工作簿对象 public Worksheet ExcelWorksheet; //Excel工作表对象 public ExcelOperator()//声明用于操作Excel的对象,并定义其构造函数 { ExcelApplication = new Application(); //创建Application对象 // ExcelApplication.Visible = true; //创建完成后是否打开Excel } /// /// 创建Excel表格 /// public void CreateExcel() { ExcelWorkbook = ExcelApplication.Workbooks.Add(true); //添加工作簿 ExcelWorksheet = ExcelWorkbook.Worksheets[1] as Worksheet; //获取工作表 } /// /// 保存Excel表格 /// /// public void SaveExcel(string fileName) { ExcelApplication.DisplayAlerts = false; //设置禁止弹出保存询问提示框 ExcelApplication.AlertBeforeOverwriting = false; //设置禁止弹出覆盖询问提示框 object FileName = fileName; //需要保存Excel文件的名称 object Password = ""; //打开Excel文档密码,少于16位 object WriteResPassword = ""; //修改Excel文档密码,小于16位 object ReadOnlyRecommended = false; //Excel以只读形式打开是否提示 object CreateBackup = false; //是否创建备份 ExcelWorkbook.SaveAs(FileName, Missing.Value, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, XlSaveAsAccessMode.xlNoChange); } /// /// 退出Excel应用 /// public void QuitExcel() { ExcelApplication.Quit(); //退出Excel应用 } /// /// 获取Excel表格中的单元格 /// /// /// /// public Range this[object indexRow, object indexColumn] { get { return ExcelWorksheet.Cells[indexRow, indexColumn]; } //返回指定单元格 } } }
(2)将数据库中的学生信息表写入Excel表格中,并进行统计。在CreateExcel项目中的main函数中添加代码如下:
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM student_info",
"Data Source=.\\SQLEXPRESS;Initial Catalog=student;Integrated Security=True");
DataSet dataSet = new DataSet();
adapter.Fill(dataSet); //填充数据集
string[] fields = new string[]{" 学号 ","姓名","年龄","年级","成绩","性别"};
//为学生信息表添加列名
for (int indexColumn = 0; indexColumn { Range range = excel[1, indexColumn + 1];
range.Value2 = fields[indexColumn];
}
//把学生信息表写入Excel中
for (int indexRow = 0; indexRow {
for (int indexColumn = 0; indexColumn indexColumn++)
{
Range range = excel[indexRow + 2, indexColumn + 1];
range.Value2 = dataSet.Tables[0].Rows[indexRow][indexColumn];
if (indexColumn == 4 && range.Value2 range.Interior.ColorIndex = 6;
}
}
嵌套的for循环详细解释如下:
-
外部循环(for (int indexRow = 0; indexRow
-
内部循环(for (int indexColumn = 0; indexColumn
-
Range range = excel[indexRow + 2, indexColumn + 1]; 这行代码创建了一个Range对象,代表Excel工作表中的一个单元格。注意,这里的indexRow + 2和indexColumn + 1很可能是因为Excel的行和列索引是从1开始的,而程序中的数据集索引是从0开始的,所以需要进行调整以匹配Excel的索引。
-
range.Value2 = dataSet.Tables[0].Rows[indexRow][indexColumn]; 这行代码将数据集中当前行列的值赋给Excel工作表中对应的单元格。
-
接下来的if语句检查当前处理的列是否是第5列(即indexColumn == 4,因为索引从0开始),并且该单元格的值(学生成绩)是否小于60。如果两个条件都满足,那么执行range.Interior.ColorIndex = 6;,将单元格的背景色设置为黄色(在Excel中,颜色索引6通常对应黄色)。
(3)统计学生信息表中学生的平均年龄、平均年级和平均成绩。在CreateExcel项目的main函数中添加代码如下:
Range rangeAverage = excel[22, 1];
rangeAverage.Value2 = "平均值";
Range rangeAge = excel[22, 3];
rangeAge.Formula = "=AVERAGE(C2:C21)"; //计算平均年龄
Range rangeGrade = excel[22, 4];
rangeGrade.Formula = "=AVERAGE(D2:D21)"; //计算平均年级
Range rangeResult = excel[22, 5];
rangeResult.Formula = "=AVERAGE(E2:E21)"; //计算数据成绩
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using OfficeOperator2; using Microsoft.Office.Interop.Excel; using System.Data.SqlClient; using System.Data; namespace CreateExcel { internal class Program { static void Main(string[] args) { ExcelOperator excel = new ExcelOperator(); //创建Excel操作者 excel.CreateExcel(); //创建Excel表格 //将数据库中的学生信息表写入Excel表格中,并进行统计------- SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM staq_info", "Data Source=.\\SQLEXPRESS;Initial Catalog=aq;Integrated Security=True"); DataSet dataSet = new DataSet(); adapter.Fill(dataSet); //填充数据集 string[] fields = new string[] { " 学号 ", "姓名", "年级", "成绩", "年龄", "性别" }; //为学生信息表添加列名 for (int indexColumn = 0; indexColumn启动CreateExcel控制台应用程序:创建保存了一个带数据的Excel文档
--读取Excel表--
首先打开当前目录下的Excel表格,然后逐行读取Excel表格中的数据,最后将读取的数据输出到控制台窗口
(1)在OfficeOperator2项目的ExcelOperator类中定义打开Excel表格的函数OpenExcel,代码如下:
public void OpenExcel(string fileName)
{
ExcelWorkbook = ExcelApplication.Workbooks.Open(fileName); //打开Excel表格
ExcelWorksheet = ExcelWorkbook.Worksheets[1] as Worksheet; //获取工作表
}(2)创建一个名为OpenExcel的控制台应用程序,为其添加对项目OfficeOperator2的引用。在其main函数中添加代码:
ExcelOperator excel = new ExcelOperator(); //创建Excel操作对象
excel.OpenExcel(Directory.GetCurrentDirectory() + "\\测试表格.xlsx");//打开Excel表格
int indexRow = 1;
int indexColumn = 1;
Range range = excel[indexRow, indexColumn]; //获取Excel中指定的单元格
while (range.Value2 != null)
{//遍历行
while (range.Value2 != null)
{//遍历列
Console.Write(range.Value2 + "\t"); //输出单元格中的内容
range = excel[indexRow, ++indexColumn];
}
indexColumn = 1;
range = excel[++indexRow, indexColumn];
Console.WriteLine();
}
excel.QuitExcel();
启动OpenExcel的控制台应用程序: