21.2.2 保存
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
如果打开某个Excel文件修改后,需要保存到原文件或者用新的文件名保存,在 Excel.Application.Quit() 前使用Workbook.Save() 或 Workbook.SaveAs(新文件名称) 就可以了。
但是对于要把数据(并非通过打开Excel文件获得的数据)保存成Excel文件,那么可以按照以下步骤:
1、新建了一个Application对象:
Microsoft.Office.Interop.Excel.Application xls = new Microsoft.Office.Interop.Excel.Application();
2、新建工作簿并添加到创建的Application对象:
Workbook Wbook = xls.Workbooks.Add();
3、 使用原有的工作表,一般默认创建Wbook后会有sheet1、sheet2、sheet3三个工作表,可以使用上一节方法指定一个工作表写数据。
或者新建工作表:
Worksheet Wsheet = Wbook.Worksheets.Add();
并按需要指定工作表名称,如不指定,那么新工作表默认名称为 Sheet4:
Wsheet.Name = "电脑销售表"
4、读取现有数据并写入单元格,需要注意的是Excel单元格的起始序号为1:
Wsheet.Cells[行号,列号].value = "值";
5、保存工作簿
Workbook.SaveAs(文件名称);
6、最后,别忘了关闭打开的 Excel:
xls.Quit();
【例 21.2】【项目:code21-002】保存数据库表中的数据到Excel。
//从Northwind中查询产品表数据并显示到DataGridView
private void Button1_Click(object sender, EventArgs e)
{
OleDbConnection connection = new OleDbConnection();
connection.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;data source=c:\\lessons\\northwind.mdb;";
//为简化,这里只取得了10条记录
string CommandText = "select top 10 产品名称,单位数量,单价,库存量 from 产品";
DataSet ds = new DataSet("Northwind");
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand();
adapter.SelectCommand.CommandText = CommandText;
adapter.SelectCommand.Connection = connection;
System.Data.DataTable dt = ds.Tables.Add();
dt.TableName = "产品";
adapter.Fill(dt);
DataGridView1.DataSource = ds.Tables["产品"];
adapter.Dispose();
connection.Close();
}
//另存为
private void Button2_Click(object sender, EventArgs e)
{
string filename;
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "表格文件|*.xls;*.xlsx";
if (sfd.ShowDialog() != DialogResult.OK)
return;
else
filename = sfd.FileName;
Microsoft.Office.Interop.Excel.Application xls = new Microsoft.Office.Interop.Excel.Application();
Workbook Wbook;
//使用Add方法新建一个工作簿
Wbook = xls.Workbooks.Add();
Worksheet Wsheet;
Wsheet = Wbook.Worksheets.Add();
//如果不新建工作表,可以使用默认工作表,比如:
//Wsheet = Wbook.Worksheets[1];
//设置工作表名称
Wsheet.Name = "产品表";
//处理列标题,写入Excel表第一行
if (DataGridView1.Columns.Count > 1)
for (int i = 0; i < DataGridView1.ColumnCount; i++)
Wsheet.Cells[1,i+1].Value = DataGridView1.Columns[i].HeaderText;
if( DataGridView1.Rows.Count > 0)
{
for(int i = 0;i< DataGridView1.RowCount;i++)
{
//注意:如果是新行的话,获取值会出错,这里把新行排除
//或者直接设置DataGridView1的AllowUserToAddRows属性为false
if (DataGridView1.Rows[i].IsNewRow)
break;
for(int j = 0;j< DataGridView1.ColumnCount;j++)
{
//将数据写到Excel
//单元格行从索引2开始,而DataGridView1中的行数据从索引0开始,所以+2
//单元格列从索引1开始,而DataGridView1中的列数据从索引0开始,所以+1
Wsheet.Cells[i + 2, j + 1].value = DataGridView1.Rows[i].Cells[j].Value.ToString();
}
}
}
//保存到指定文件
Wbook.SaveAs(filename);
//退出
xls.Quit();
MessageBox.Show("保存完毕");
}
运行结果如下图所示:
图21-4 按下“保存”按钮后提示保存完毕
保存的Excel文件如下图所示:
图21-5 Excel中的数据
实际操作中如果不需要显示数据,可以不使用DataGridView控件,从数据库读数据后直接写入Excel。
学习更多vb.net知识,请参看vb.net 教程 目录
学习更多C#知识,请参看C#教程 目录