public static void CreateExcelFile(string FileName, List<UUser> luu)
{
if (FileName.Split('.')[FileName.Split('.').Length - ] == "xlsx")//如果是2007版以后
{
//create
object Nothing = System.Reflection.Missing.Value;
var app = new Excel.Application();
app.Visible = false;
Excel.Workbook workBook = app.Workbooks.Add(Nothing);
Excel.Worksheet worksheet = (Excel.Worksheet)workBook.Sheets[];
worksheet.Name = "Sheet1";
//headline
int i = ;
foreach (UUser uu in luu)
{ worksheet.Cells[, i] = uu.name;
i++;
} worksheet.SaveAs(FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing);
workBook.Close(false, Type.Missing, Type.Missing);
app.Quit();
}
else
{
HSSFWorkbook wk = new HSSFWorkbook(); //创建一个名称为mySheet的表
ISheet tb = wk.CreateSheet("Sheet1");
//创建一行,此行为第二行
IRow row = tb.CreateRow();
for (int i = ; i < luu.Count; i++)
{
ICell cell = row.CreateCell(i); //在第二行中创建单元格
cell.SetCellValue(luu[i].name);//循环往第二行的单元格中添加数据 }
using (FileStream fs = File.OpenWrite(FileName))
{
wk.Write(fs); //向打开的这个xls文件中写入mySheet表并保存。 }
} }
}

using Excel = Microsoft.Office.Interop.Excel;

using NExcel;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;

需要这些引用 dll网上都可以下载

  /// 将excel中的数据导入到DataTable中
/// </summary>
/// <param name="sheetName">excel工作薄sheet的名称</param>
/// <param name="isFirstRowColumn">第一行是否是DataTable的列名</param>
/// <returns>返回的DataTable</returns>
public static DataTable ExcelToDataTable(string name, string sheetName, bool isFirstRowColumn)//name 是excel的地址
{
List<string> ls = new List<string>();
string sss = null;
IWorkbook workbook = null;
string fileName = name;
ISheet sheet = null;
DataTable data = new DataTable();
int startRow = ;
try
{
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
if (fileName.IndexOf(".xlsx") > ) // 2007版本
workbook = new XSSFWorkbook(fs);
else if (fileName.IndexOf(".xls") > ) // 2003版本
workbook = new HSSFWorkbook(fs);
if (sheetName != null)
{
//sheet = workbook.GetSheetAt(0);
sheet = workbook.GetSheet(sheetName); }
else
{
sheet = workbook.GetSheetAt();
}
if (sheet != null)
{
IRow firstRow = sheet.GetRow();
int cellCount = firstRow.Cells.Count; //一行最后一个cell的编号 即总的列数 if (isFirstRowColumn)
{
for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
{ DataColumn column = new DataColumn(firstRow.GetCell(i).StringCellValue.Replace("\n", "").Replace(" ","").Replace("\t","").Replace("\r",""));
data.Columns.Add(column); }
startRow = sheet.FirstRowNum + ;
}
else
{
startRow = sheet.FirstRowNum;
} //最后一列的标号
int rowCount = sheet.LastRowNum;
for (int i = startRow; i <= rowCount; ++i)
{
IRow row = sheet.GetRow(i);
if (row == null) continue; //没有数据的行默认是null        DataRow dataRow = data.NewRow();
for (int j = row.FirstCellNum; j < cellCount; ++j)
{
if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是null
{ switch (row.GetCell(j).CellType)
{
case NPOI.SS.UserModel.CellType.Blank: //空数据类型处理
dataRow[j] = "";
break;
case NPOI.SS.UserModel.CellType.String: //字符串类型
dataRow[j] = "'" + row.GetCell(j).StringCellValue;
break;
case NPOI.SS.UserModel.CellType.Numeric: //数字类型
if (HSSFDateUtil.IsCellDateFormatted(row.GetCell(j)))
{
dataRow[j] ="'"+row.GetCell(j).DateCellValue.ToShortDateString().Split(' ')[];
}
else
{
if (row.GetCell(j).NumericCellValue.ToString().IndexOf(".") < )
dataRow[j] = row.GetCell(j).NumericCellValue;
else
{
dataRow[j] =Convert.ToDouble( getstr( row.GetCell(j).NumericCellValue.ToString())); }
}
break;
case NPOI.SS.UserModel.CellType.Formula:
if (fileName.IndexOf(".xlsx") < )
{
HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(workbook);
dataRow[j] = e.Evaluate(row.GetCell(j)).StringValue;
}
else
{
XSSFFormulaEvaluator e = new XSSFFormulaEvaluator(workbook);
dataRow[j] = e.Evaluate(row.GetCell(j)).StringValue;
} break;
default:
row.GetCell(j).SetCellType(NPOI.SS.UserModel.CellType.String);
dataRow[j] = row.GetCell(j).StringCellValue;
break;
}
}
}
data.Rows.Add(dataRow);
}
}
fs.Close();
return data;
}
catch (Exception ex)
{ // MessageBox.Show("err:"+ex.Message);
return new DataTable();
}
}

 public  static void DataTableToExcel(DataTable dt, Excel.Worksheet excelSheet,ProgressBar s,List<UUser> luu)
{
s.Maximum = dt.Rows.Count * luu.Count;
s.Value = ;
s.Visible = true;
int rowCount = dt.Rows.Count ;
int colCount =luu.Count;
object[,] dataArray = new object[rowCount+, colCount];
for (int k = ; k < luu.Count; k++)
{ string str= luu[k].name;
dataArray[, k] = str;
} for (int i = ; i < rowCount; i++)
{
for (int j = ; j < luu.Count; j++)
{ dataArray[i + , j] =dt.Rows[i][luu[j].source]; Application.DoEvents();
s.Value = s.Value + ;
}
}
excelSheet.Range["A1", excelSheet.Cells[rowCount+, colCount]].Value2 = dataArray;
s.Visible = false;
s.Value = ;
}

这个uuser 有两个字段 Name 和 Source

name 是写入到新excel的列名

source 是datatable里的列名

这个是一个excel转换的流程

如果只是读取和写入直接去掉list<uuser>即可

C# 创建 写入 读取 excel的更多相关文章

  1. C# 处理Excel公式(一)——创建、读取Excel公式

    对于数据量较大的表格,需要计算一些特殊数值时,我们通过运用公式能有效提高我们数据处理的速度和效率,对于后期数据的增删改查等的批量操作也很方便.此外,对于某些数值的信息来源,我们也可以通过读取数据中包含 ...

  2. C# -- 使用Aspose.Cells创建和读取Excel文件

    使用Aspose.Cells创建和读取Excel文件 1. 创建Excel Aspose.Cells.License li = new Aspose.Cells.License(); li.SetLi ...

  3. 使用Apache下poi创建和读取excel文件

    一:使用apache下poi创建excel文档 @Test /* * 使用Apache poi创建excel文件 */ public void testCreateExcel() { // 1:创建一 ...

  4. LR创建数据源读取excel

    1 在window上创建数据源   2 创建对应的数据文件 excel 注:注意格式和底部的表单名称 3 Vegen中创建参数 注意:机器数据源选择windows的ODBC数据源 SQL查的是(she ...

  5. Android创建与读取Excel

    主流的操作Excel的有两种方法,一种是通过poi包,另一种是通过jxl包.这里我主要讲解通过jxl包来读写Excel. 首先需要导入一个jxl.jar包. 下载地址:http://www.andyk ...

  6. python:创建文件夹:写入文本1:读取txt:读取Excel文件遍历文件夹:

    https://blog.csdn.net/u011956147/article/details/80369731 创建文件夹: import osimport shutil def buildfil ...

  7. C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表

    调用word的com组件将400条数据导入word表格中耗时10分钟简直不能忍受,使用NPOI组件耗时4秒钟.但是NPOI中替换书签内容的功能不知道是不支持还是没找到. 辅助类 Excel表格数据与D ...

  8. Java POI读取Excel数据,将数据写入到Excel表格

    1.准备 首先需要导入poi相应的jar包,包括: 下载地址:http://pan.baidu.com/s/1bpoxdz5 所需要的包的所在位置包括: 2.读取Excel数据代码 package S ...

  9. python 的两个模块xlwt,xlrd,写入和读取Excel数据

    http://www.cnblogs.com/fireme/p/3887284.html 这上面写的很全,不过我只需要简单的读和写的操作就ok了,下面是我写的读和写入Excel操作 读取Excel数据 ...

随机推荐

  1. 什么是V模型?使用SDLC和STLC学习案例研究

    本教程详细介绍了软件/系统开发生命周期(SDLC),如瀑布循环和迭代循环,如RAID和Agile.此外,它继续解释测试的V模型和STLC(软件测试生命周期). 假设为您分配了一项任务,即为客户开发自定 ...

  2. 先天性肾上腺增生症(ACH)

    先天性肾上腺增生症 类型 症状 并发症 治疗 情感支持 产前筛查 预防 什么是先天性肾上腺皮质增生症? 先天性肾上腺增生症(CAH)是一组影响肾上腺的遗传性疾病.肾上腺产生激素皮质醇和醛固酮.CAH是 ...

  3. 根据list集合某个字段进行排序

    import java.util.ArrayList; import java.util.List; class Student { private String name; private doub ...

  4. Spring的几种注入bean的方式

    在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入  这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式).   使用属性的se ...

  5. 使用SetInterval时函数不能传参问题

    无论是window.setTimeout还是window.setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,这就需要想方法解决.经网上查询后整理如下:例如对于函 ...

  6. C# 4.0 可选参数 和 命名参数

    可选参数 可选参数是 C# 4.0 提出来的,当我们调用方法,不给这个参数(可选参数)赋值时,它会使用我们定义的默认值. 需要注意的是: (1)可选参数必须位于所有必选参数的后面: (2)可选参数必须 ...

  7. activiti实战系列之动态表单 formService 自定义变量类型

    目前Activiti默认支持的类型有String,long,enum,date,boolean,collection 要自定义字段类型,首先需要表单类型解析类 /** * @Author:LJ * @ ...

  8. dubbo 框架和 tomcat 的比较

    接触 dubbo 有一段时间,特别想拿 dubbo 和 tomcat 比较一番. tomcat 是 web 服务器,提供 http 服务,当 tomcat 收到浏览器发送的 http 请求时,根据 u ...

  9. ActiveMQ producer不断发送消息,会导致broker内存耗尽吗?

    http://activemq.apache.org/my-producer-blocks.html 回答了这个问题: ActiveMQ 5.x 支持Message Cursors,它默认把消息从内存 ...

  10. vm安装diagram

        xxx1234ZZ   xxx1234ZZ@