C# 创建 写入 读取 excel

 public static void CreateExcelFile(string FileName, List<UUser> luu)
        {
            if (FileName.Split(‘.‘)[FileName.Split(‘.‘).Length - 1] == "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[1];
                worksheet.Name = "Sheet1";
                //headline
                int i = 1;
                foreach (UUser uu in luu)
                {

                    worksheet.Cells[1, 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(1);
                for (int i = 0; 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 = 0;
            try
            {
                FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
                if (fileName.IndexOf(".xlsx") > 0) // 2007版本
                    workbook = new XSSFWorkbook(fs);
                else if (fileName.IndexOf(".xls") > 0) // 2003版本
                    workbook = new HSSFWorkbook(fs);
                if (sheetName != null)
                {
                    //sheet = workbook.GetSheetAt(0);
                    sheet = workbook.GetSheet(sheetName);

                }
                else
                {
                    sheet = workbook.GetSheetAt(0);
                }
                if (sheet != null)
                {
                    IRow firstRow = sheet.GetRow(0);
                    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 + 1;
                    }
                    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(‘ ‘)[0];
                                        }
                                        else
                                        {
                                            if (row.GetCell(j).NumericCellValue.ToString().IndexOf(".") < 0)
                                                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") < 0)
                                        {
                                            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 = 0;
             s.Visible = true;
            int rowCount = dt.Rows.Count ;
            int colCount =luu.Count;
            object[,] dataArray = new object[rowCount+1, colCount];
            for (int k = 0; k < luu.Count; k++)
            {

               string str= luu[k].name;
                dataArray[0, k] = str;
            }

            for (int i = 0; i < rowCount; i++)
            {
                for (int j = 0; j < luu.Count; j++)
                {

                        dataArray[i + 1, j] =dt.Rows[i][luu[j].source];

                    Application.DoEvents();
                    s.Value = s.Value + 1;
                }
            }
            excelSheet.Range["A1", excelSheet.Cells[rowCount+1, colCount]].Value2 = dataArray;
            s.Visible = false;
            s.Value = 0;
        }

这个uuser 有两个字段 Name 和 Source

name 是写入到新excel的列名

source 是datatable里的列名

这个是一个excel转换的流程

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

时间: 2024-10-06 15:42:42

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

C# 创建、读取Excel公式

对于数据量较大的表格,需要计算一些特殊数值时,我们通过运用公式能有效提高我们数据处理的速度和效率,对于后期数据的增删改查等的批量操作也很方便.此外,对于某些数值的信息来源,我们也可以通过读取数据中包含的公式来获取.下面的示例中将分享通过C# 来创建.读取Excel公式的方法. 工具使用 Spire.XLS for .NET 8.0下载安装该类库后,注意在程序中添加引用Spire.Xls.dll(dll文件可在安装路径下的Bin文件夹中获取)代码示例(供参考) [示例1]创建Excel公式 C#

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

一:使用apache下poi创建excel文档 1 @Test 2 /* 3 * 使用Apache poi创建excel文件 4 */ 5 public void testCreateExcel() { 6 // 1:创建一个excel文档 7 HSSFWorkbook workbook = new HSSFWorkbook(); 8 // 2:创建一个sheet工作表,名为“学生成绩” 9 HSSFSheet sheet = workbook.createSheet("学生成绩");

POI创建和读取excel文件

Poi创建excel文件 所需jar:poi-3.11-20141221.jar  commons-io-2.2.jar public class PoiExpExcel { /**     * POI生成Excel文件     */    public static void main(String[] args) { String[] title = {"id","name","sex"};                //新建工作簿  

Android创建与读取Excel

主流的操作Excel的有两种方法,一种是通过poi包,另一种是通过jxl包.这里我主要讲解通过jxl包来读写Excel. 首先需要导入一个jxl.jar包. 下载地址:http://www.andykhan.com/jexcelapi/download.html 下载后的文件会包含jxl相关的API. 下面直接上代码: WriteExcel.java 1 import java.io.File; 2 3 import java.io.IOException; 4 5 import java.ut

C# 读取Excel文件,并写入word模板文档

1.该程序是一个win32控制台程序 2.开发工具是VS2010,office是2013版的 3.需要添加以下引用 4 在C盘保存.dot模板,样式如下 6.excel中的数据格式,最好都设置为常规. 具体的代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient; using

通过python中xlrd读取excel表格(xlwt写入excel),xlsxwriter写入excel表格并绘制图形

1 import xlrd, xlwt 2 3 #读取excel文件 4 def read_excel(url):#传入源文件读取路径 5 # 获取数据 6 data = xlrd.open_workbook(url) 7 # 获取sheet 8 # table = data.sheet_by_name(sheet_name) #通过sheet名称获取sheet数据 9 table = data.sheet_by_index(0) #通过sheet索引获取sheet数据 10 # 获取总行数 1

java读取excel文件内容,并将读取到的内容写入到另一文件中

需要导入的jar包下载地址https://pan.baidu.com/s/16cTpUfx0KvKkbGYkXAUKMA 代码:ReadExcel.java //信1605-3 20163432 张运涛 package domain; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import jxl.Cell; import jxl.CellType; import jxl.Sh

使用NPOI读取Excel数据并写入SQLite

首先,我们来建一个数据库,我们就叫Hello.db(不一定是db后缀,你可以sqlite,sqlite3,db3)都可以作为识别,然后往里面建一个空的表格,如下图所示 然后建一个Excel表格,往表格里面写入一些数据,我这里只是Demo形式,可以根据自己的实际情况,稍作修改 然后开始建一个新的项目,我这里用的是WPF,你可以使用Core,Console,Winform都可以,我这里提供思路,仅供参考 然后引用一下图中的dll程序集,主要是SQLite和NPOI,你可以到Nuget去下载,Nuge

C#操作Excel文件(读取Excel,写入Excel)

看到论坛里面不断有人提问关于读取excel和导入excel的相关问题.闲暇时间将我所知道的对excel的操作加以总结,如今共享大家,希望给大家可以给大家带了一定的帮助.另外我们还要注意一些简单的问题1.excel文件仅仅能存储65535行数据,假设你的数据大于65535行,那么就须要将excel切割存放了.2.关于乱码,这主要是字符设置问题. 1.载入Excel(读取excel内容)返回值是一个DataSet //载入Excel public static DataSet LoadDataFro