C# 导入导出

/1、要把文件加载到程序中

//2、获取sheet

//3、获取所有行

//4、获取行中所有的数据

//5、将获取到的数据,按照原有的数据格式,存储到一个数据容器中

OpenFileDialog ofd = new OpenFileDialog();

ofd.Filter = "Excel(*.xlsx)|*.xlsx";

if (ofd.ShowDialog() != DialogResult.OK)

{

return;

}

//创建一个数据表,用来存储 从Excel中导入的数据

DataTable dt = new DataTable();

//得到Excel文件地址 是包含路径的fileName

string excelFilePath = ofd.FileName;

//创建一个工作簿 2007版本及以上 使用XSSFWorkbook ,2007以前的版本 使用 使用HSSFWorkbook

IWorkbook workbook = new XSSFWorkbook(excelFilePath);

//创建一个sheet ,用来存储Excel中的一个Sheet

//ISheet sheet = workbook.GetSheet("Sheet1");//根据sheet的名字获取

ISheet sheet = workbook.GetSheetAt(0);//根据sheet的索引,索引从0开始

//创建一个Row 存储第一行有效数据,通常 有可能是标题行

IRow row = sheet.GetRow(sheet.FirstRowNum);

//处理标题行, 遍历标题行中所有的单元格(Cell),每个单元格的值 即为列名

foreach (ICell item in row.Cells)

{

//往DataTable中添加Excel中对应的列的值

object cellValue = this.GetCellValueByType(item);

string columnName = "";//DataTable的列明

if (cellValue == null || cellValue.ToString() =="")

{

columnName = "column" + dt.Columns.Count;//默认名

}

else

{

columnName = cellValue.ToString();//具体值单元格值 作为名字

}

dt.Columns.Add(columnName);

}

//遍历所有的有效数据 并将有效数据 添加到DataTable

for (int i = sheet.FirstRowNum+1; i <= sheet.LastRowNum; i++)

{

IRow dataRow = sheet.GetRow(i);

DataRow dr = dt.NewRow();// 创建与dt表具有相同架构的新数据行(Row)

for (int j = 0; j < dataRow.Cells.Count; j++)

{

dr[j] = this.GetCellValueByType( dataRow.Cells[j]);

}

dt.Rows.Add(dr);//向dt数据表中添加一个数据行

}

//将导入的数据表 绑定到dataGridView1

dataGridView1.DataSource = dt;

}

-----------------------------导出

IWorkbook wordbook = new XSSFWorkbook();

ISheet sheet = wordbook.CreateSheet("Sheet1");

IRow row = sheet.CreateRow(0);

row.CreateCell(0).SetCellValue("姓名");

row.CreateCell(1).SetCellValue("性别");

row.CreateCell(2).SetCellValue("年龄");

for (int i = 0; i < dt.Rows.Count; i++)

{

row = sheet.CreateRow(i+1);

row.CreateCell(0).SetCellValue(dt.Rows[i]["姓名"].ToString());

row.CreateCell(1).SetCellValue(dt.Rows[i]["性别"].ToString());

row.CreateCell(2).SetCellValue(Convert.ToInt32(dt.Rows[i]["年龄"]));

}

using (FileStream fs = new FileStream(excelFileSavePath, FileMode.Create, FileAccess.Write))

{

wordbook.Write(fs);

}

MessageBox.Show("导出完成");