使用NPOI导入导出标准Excel(源码)

http://www.cnblogs.com/lwme/archive/2011/11/18/npoi_excel_import_export.html

 

尝试过很多Excel导入导出方法,都不太理想,无意中逛到oschina时,发现了NPOI,无需Office COM组件且不依赖Office,顿时惊为天人,怀着无比激动的心情写下此文。

 

曾使用过的方法

  1. 直接导出html,修改后缀名为.xls,这个方法有点像骗人的把戏,而且不能再导入
  2. 使用Jet OLEDB引擎来进行导入导出,完全使用sql语句来进行操作,缺点能控制的东西非常有限,比如格式就难以控制
  3. 使用Office COM组件进行导入导出,对环境依赖性太强(如“检索 COM 类工厂…”错误);且需要通过打开Excel.exe进程进行操作;虽然可以通过关闭工作表以及Marshal.ReleaseComObject方法来释放资源,但依然避免不了性能差。

 

关于NPOI

NPOIPOI项目的.NET版本,是由@Tony Qu(http://tonyqus.cnblogs.com/)等大侠基于POI开发的,可以从http://npoi.codeplex.com/下载到它的最新版本。它不使用Office COM组件(Microsoft.Office.Interop.XXX.dll),不需要安装Microsoft Office,支持对Office 97-2003的文件格式,功能比较强大。更详细的说明请看作者的博客或官方网站。

 

它的以下一些特性让我相当喜欢:

  1. 支持对标准的Excel读写
  2. 支持对流(Stream)的读写 (而Jet OLEDB和Office COM都只能针对文件)
  3. 支持大部分Office COM组件的常用功能
  4. 性能优异 (相对于前面的方法)
  5. 使用简单,易上手

 

使用NPOI

本文使用的是它当前的最新版本1.2.4,此版本的程序集缩减至2个:NPOI.dllIonic.Zip.dll,直接引用到项目中即可。

对于我们开发者使用的对象主要位于NPOI.HSSF.UserModel空间下,主要有HSSFWorkbookHSSFSheetHSSFRowHSSFCell,对应的接口为位于NPOI.SS.UserModel空间下的IWorkbookISheetIRowICell,分别对应Excel文件、工作表、行、列。

 

简单演示一下创建一个Workbook对象,添加一个工作表,在工作表中添加一行一列:

using NPOI.HSSF.UserModel;

using NPOI.SS.UserModel;

 

public class NPOIWrite

{

    void CreateSheet()

    {

        IWorkbook workbook = new HSSFWorkbook();//创建Workbook对象

        ISheet sheet = workbook.CreateSheet("Sheet1");//创建工作表

        IRow row = sheet.CreateRow(0);//在工作表中添加一行

        ICell cell = row.CreateCell(0);//在行中添加一列

        cell.SetCellValue("test");//设置列的内容

    }

}

 

相应的读取代码:

using System.IO;

using NPOI.HSSF.UserModel;

using NPOI.SS.UserModel;

 

public class NPOIRead

{

    void GetSheet(Stream stream)

    {

        IWorkbook workbook = new HSSFWorkbook(stream);//从流内容创建Workbook对象

        ISheet sheet = workbook.GetSheetAt(0);//获取第一个工作表

        IRow row = sheet.GetRow(0);//获取工作表第一行

        ICell cell = row.GetCell(0);//获取行的第一列

        string value = cell.ToString();//获取列的值

    }

}

 

使用NPOI导出

从DataTable读取内容来创建Workbook对象:

public static MemoryStream RenderToExcel(DataTable table)

{

    MemoryStream ms = new MemoryStream();

 

    using (table)

    {

        using (IWorkbook workbook = new HSSFWorkbook())

        {

            using (ISheet sheet = workbook.CreateSheet())

            {

                IRow headerRow = sheet.CreateRow(0);

 

                // handling header.

                foreach (DataColumn column in table.Columns)

                    headerRow.CreateCell(column.Ordinal).SetCellValue(column.Caption);//If Caption not set, returns the ColumnName value

 

                // handling value.

                int rowIndex = 1;

 

                foreach (DataRow row in table.Rows)

                {

                    IRow dataRow = sheet.CreateRow(rowIndex);

 

                    foreach (DataColumn column in table.Columns)

                    {

                        dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());

                    }

 

                    rowIndex++;

                }

 

                workbook.Write(ms);

                ms.Flush();

                ms.Position = 0;

            }

        }

    }

    return ms;

}

如果看不惯DataTable,那么DataReader也行:

public static MemoryStream RenderToExcel(IDataReader reader)

{

    MemoryStream ms = new MemoryStream();

 

    using (reader)

    {

        using (IWorkbook workbook = new HSSFWorkbook())

        {

            using (ISheet sheet = workbook.CreateSheet())

            {

                IRow headerRow = sheet.CreateRow(0);

                int cellCount = reader.FieldCount;

 

                // handling header.

                for (int i = 0; i < cellCount; i++)

                {

                    headerRow.CreateCell(i).SetCellValue(reader.GetName(i));

                }

 

                // handling value.

                int rowIndex = 1;

                while (reader.Read())

                {

                    IRow dataRow = sheet.CreateRow(rowIndex);

 

                    for (int i = 0; i < cellCount; i++)

                    {

                        dataRow.CreateCell(i).SetCellValue(reader[i].ToString());

                    }

 

                    rowIndex++;

                }

 

                workbook.Write(ms);

                ms.Flush();

                ms.Position = 0;

            }

        }

    }

    return ms;

}

以上代码把创建的Workbook对象保存到流中,可以通过以下方法输出到浏览器,或是保存到硬盘中:

static void SaveToFile(MemoryStream ms, string fileName)

{

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

    {

        byte[] data = ms.ToArray();

 

        fs.Write(data, 0, data.Length);

        fs.Flush();

 

        data = null;

    }

}

 

static void RenderToBrowser(MemoryStream ms, HttpContext context, string fileName)

{

    if (context.Request.Browser.Browser == "IE")

        fileName = HttpUtility.UrlEncode(fileName);

    context.Response.AddHeader("Content-Disposition", "attachment;fileName=" + fileName);

    context.Response.BinaryWrite(ms.ToArray());

}

 

使用NPOI导入

需要注意的是,sheet.LastRowNum = sheet.PhysicalNumberOfRows - 1,这里可能存在BUG:当没有数据或只有一行数据时sheet.LastRowNum为0,PhysicalNumberOfRows 表现正常

这里读取流中的Excel来创建Workbook对象,并转换成DataTable:

static DataTable RenderFromExcel(Stream excelFileStream)

{

    using (excelFileStream)

    {

        using (IWorkbook workbook = new HSSFWorkbook(excelFileStream))

        {

            using (ISheet sheet = workbook.GetSheetAt(0))//取第一个表

            {

                DataTable table = new DataTable();

 

                IRow headerRow = sheet.GetRow(0);//第一行为标题行

                int cellCount = headerRow.LastCellNum;//LastCellNum = PhysicalNumberOfCells

                int rowCount = sheet.LastRowNum;//LastRowNum = PhysicalNumberOfRows - 1

 

                //handling header.

                for (int i = headerRow.FirstCellNum; i < cellCount; i++)

                {

                    DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);

                    table.Columns.Add(column);

                }

 

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

                {

                    IRow row = sheet.GetRow(i);

                    DataRow dataRow = table.NewRow();

 

                    if (row != null)

                    {

                        for (int j = row.FirstCellNum; j < cellCount; j++)

                        {

                            if (row.GetCell(j) != null)

                                dataRow[j] = GetCellValue(row.GetCell(j));

                        }

                    }

 

                    table.Rows.Add(dataRow);

                }

                return table;

 

            }

        }

    }

}

或者是直接生成SQL语句来插入到数据库:

public static int RenderToDb(Stream excelFileStream, string insertSql, DBAction dbAction)

{

    int rowAffected = 0;

    using (excelFileStream)

    {

        using (IWorkbook workbook = new HSSFWorkbook(excelFileStream))

        {

            using (ISheet sheet = workbook.GetSheetAt(0))//取第一个工作表

            {

                StringBuilder builder = new StringBuilder();

 

                IRow headerRow = sheet.GetRow(0);//第一行为标题行

                int cellCount = headerRow.LastCellNum;//LastCellNum = PhysicalNumberOfCells

                int rowCount = sheet.LastRowNum;//LastRowNum = PhysicalNumberOfRows - 1

 

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

                {

                    IRow row = sheet.GetRow(i);

                    if (row != null)

                    {

                        builder.Append(insertSql);

                        builder.Append(" values (");

                        for (int j = row.FirstCellNum; j < cellCount; j++)

                        {

                            builder.AppendFormat("'{0}',", GetCellValue(row.GetCell(j)).Replace("'", "''"));

                        }

                        builder.Length = builder.Length - 1;

                        builder.Append(");");

                    }

 

                    if ((i % 50 == 0 || i == rowCount) && builder.Length > 0)

                    {

                        //每50条记录一次批量插入到数据库

                        rowAffected += dbAction(builder.ToString());

                        builder.Length = 0;

                    }

                }

            }

        }

    }

    return rowAffected;

}

这里的Excel可能没有数据,所以可以加一个方法来检测:

public static bool HasData(Stream excelFileStream)

{

    using (excelFileStream)

    {

        using (IWorkbook workbook = new HSSFWorkbook(excelFileStream))

        {

            if (workbook.NumberOfSheets > 0)

            {

                using (ISheet sheet = workbook.GetSheetAt(0))

                {

                    return sheet.PhysicalNumberOfRows > 0;

                }

            }

        }

    }

    return false;

}

结尾

好吧,不说啥了,放代码:点击下载

 

http://www.cnblogs.com/WikStone/archive/2013/01/12/2857466.html

 

     前些日子做了一个简单的winform程序,需要导出的功能,刚开始省事直接使用微软的组件,但是导出之后发现效率极其低下,绝对像web那样使用npoi组件,因此简单的进行了整理,包括直接根据DataTable导出excel及DataGridview导出excel,版本是1.2.4,下面贴下主要代码两种方式,1、NPOI导出excel、 2、普通的导出excel

下面贴下主要代码:NPOI导出

     /// <summary>
         /// DataTable导出到Excel文件
         /// </summary>
         /// <param name="dtSource">源DataTable</param>
         /// <param name="strHeaderText">表头文本</param>
         /// <param name="strFileName">保存位置</param>
         public static void DataTableToExcel(DataTable dtSource, string strHeaderText, string strFileName)
         {
             using (MemoryStream ms = DataTableToExcel(dtSource, strHeaderText))
             {
                 using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write))
                 {
                     byte[] data = ms.ToArray();
                     fs.Write(data, 0, data.Length);
                     fs.Flush();
                 }
             }
         }



/// <summary>
         /// DataTable导出到Excel的MemoryStream
         /// </summary>
         /// <param name="dtSource">源DataTable</param>
         /// <param name="strHeaderText">表头文本</param>
         public static MemoryStream DataTableToExcel(DataTable dtSource, string strHeaderText)
         {
             HSSFWorkbook workbook = new HSSFWorkbook();
             HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet();
 
             #region 右击文件 属性信息
             {
                 DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
                 dsi.Company = "NPOI";
                 workbook.DocumentSummaryInformation = dsi;
 
                 SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
                 si.Author = "文件作者信息"; //填加xls文件作者信息
                 si.ApplicationName = "创建程序信息"; //填加xls文件创建程序信息
                 si.LastAuthor = "最后保存者信息"; //填加xls文件最后保存者信息
                 si.Comments = "作者信息"; //填加xls文件作者信息
                 si.Title = "标题信息"; //填加xls文件标题信息
                 si.Subject = "主题信息";//填加文件主题信息
                 si.CreateDateTime = System.DateTime.Now;
                 workbook.SummaryInformation = si;
             }
             #endregion

             HSSFCellStyle dateStyle = (HSSFCellStyle)workbook.CreateCellStyle();
             HSSFDataFormat format = (HSSFDataFormat)workbook.CreateDataFormat();
             dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");
 
             //取得列宽
             int[] arrColWidth = new int[dtSource.Columns.Count];
             foreach (DataColumn item in dtSource.Columns)
             {
                 arrColWidth[item.Ordinal] = Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length;
             }
             for (int i = 0; i < dtSource.Rows.Count; i++)
             {
                 for (int j = 0; j < dtSource.Columns.Count; j++)
                 {
                     int intTemp = Encoding.GetEncoding(936).GetBytes(dtSource.Rows[i][j].ToString()).Length;
                     if (intTemp > arrColWidth[j])
                     {
                         arrColWidth[j] = intTemp;
                     }
                 }
             } 
             int rowIndex = 0; 
             foreach (DataRow row in dtSource.Rows)
             {
                 #region 新建表,填充表头,填充列头,样式
                 if (rowIndex == 65535 || rowIndex == 0)
                 {
                     if (rowIndex != 0)
                     {
                         sheet = (HSSFSheet)workbook.CreateSheet();
                     }
 
                     #region 表头及样式
                     {
                         HSSFRow headerRow = (HSSFRow)sheet.CreateRow(0);
                         headerRow.HeightInPoints = 25;
                         headerRow.CreateCell(0).SetCellValue(strHeaderText);

                         HSSFCellStyle headStyle = (HSSFCellStyle)workbook.CreateCellStyle();
                       //  headStyle.Alignment = CellHorizontalAlignment.CENTER;
                         HSSFFont font = (HSSFFont)workbook.CreateFont();
                         font.FontHeightInPoints = 20;
                         font.Boldweight = 700;
                         headStyle.SetFont(font);
                         headerRow.GetCell(0).CellStyle = headStyle;
                        // sheet.AddMergedRegion(new Region(0, 0, 0, dtSource.Columns.Count - 1));
                         //headerRow.Dispose();
                     }
                     #endregion
 
 
                     #region 列头及样式
                     {
                         HSSFRow headerRow = (HSSFRow)sheet.CreateRow(1); 
                         HSSFCellStyle headStyle = (HSSFCellStyle)workbook.CreateCellStyle();
                         //headStyle.Alignment = CellHorizontalAlignment.CENTER;
                         HSSFFont font = (HSSFFont)workbook.CreateFont();
                         font.FontHeightInPoints = 10;
                         font.Boldweight = 700;
                         headStyle.SetFont(font); 
                         foreach (DataColumn column in dtSource.Columns)
                         {
                             headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
                             headerRow.GetCell(column.Ordinal).CellStyle = headStyle;
 
                             //设置列宽
                             sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + 1) * 256); 
                         }
                        // headerRow.Dispose();
                     }
                     #endregion
 
                     rowIndex = 2;
                 }
                 #endregion
 
 
                 #region 填充内容
                 HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex);
                 foreach (DataColumn column in dtSource.Columns)
                 {
                     HSSFCell newCell =(HSSFCell) dataRow.CreateCell(column.Ordinal);
 
                     string drValue = row[column].ToString();
 
                     switch (column.DataType.ToString())
                     {
                         case "System.String"://字符串类型
                             newCell.SetCellValue(drValue);
                             break;
                         case "System.DateTime"://日期类型
                            System.DateTime dateV;
                            System.DateTime.TryParse(drValue, out dateV);
                             newCell.SetCellValue(dateV);
 
                             newCell.CellStyle = dateStyle;//格式化显示
                             break;
                         case "System.Boolean"://布尔型
                             bool boolV = false;
                             bool.TryParse(drValue, out boolV);
                             newCell.SetCellValue(boolV);
                             break;
                         case "System.Int16"://整型
                         case "System.Int32":
                         case "System.Int64":
                         case "System.Byte":
                             int intV = 0;
                             int.TryParse(drValue, out intV);
                             newCell.SetCellValue(intV);
                             break;
                         case "System.Decimal"://浮点型
                         case "System.Double":
                             double doubV = 0;
                             double.TryParse(drValue, out doubV);
                             newCell.SetCellValue(doubV);
                             break;
                         case "System.DBNull"://空值处理
                             newCell.SetCellValue("");
                             break;
                         default:
                             newCell.SetCellValue("");
                             break;
                     }
 
                 }
                 #endregion
 
                 rowIndex++;
             } 
             using (MemoryStream ms = new MemoryStream())
             {
                 workbook.Write(ms);
                 ms.Flush();
                 ms.Position = 0;
 
                 sheet.Dispose();
                 //workbook.Dispose();//一般只用写这一个就OK了,他会遍历并释放所有资源,但当前版本有问题所以只释放sheet
                 return ms;
             } 
         }

普通excel导出

#region 导出excel

       public static void ExportExcel(string fileName, DataGridView myDGV,bool isShowDialog)
       {
           string saveFileName = "";
           if (isShowDialog)
           {
               //bool fileSaved = false;
               SaveFileDialog saveDialog = new SaveFileDialog();
               saveDialog.DefaultExt = "xls";
               saveDialog.Filter = "Excel文件|*.xls";
               saveDialog.FileName = fileName;
               saveDialog.ShowDialog();
               saveFileName = saveDialog.FileName;
               if (saveFileName.IndexOf(":") < 0) return; //被点了取消 
           }
           else
           {
              // saveFileName = Application.StartupPath + @"\导出记录\" + fileName + ".xls";
               saveFileName = fileName;
           }
           Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
           if (xlApp == null)
           {
               MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel");
               return;
           }

           Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
           Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
           Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1 

           //写入标题
           for (int i = 0; i < myDGV.ColumnCount; i++)
           {
               worksheet.Cells[1, i + 1] = myDGV.Columns[i].HeaderText;
           }
           //写入数值
           for (int r = 0; r < myDGV.Rows.Count; r++)
           {
               for (int i = 0; i < myDGV.ColumnCount; i++)
               {
                   if (myDGV[i, r].ValueType == typeof(string)
                      || myDGV[i, r].ValueType == typeof(DateTime))//这里就是验证DataGridView单元格中的类型,如果是string或是DataTime类型,则在放入缓 存时在该内容前加入" ";
                   {
                       worksheet.Cells[r + 2, i + 1] = "'" + myDGV.Rows[r].Cells[i].Value;
                   }
                   else
                   {
                       worksheet.Cells[r + 2, i + 1] = myDGV.Rows[r].Cells[i].Value;
                   }
               }
               System.Windows.Forms.Application.DoEvents();
           }
           worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
           //if (Microsoft.Office.Interop.cmbxType.Text != "Notification")
           //{
           //    Excel.Range rg = worksheet.get_Range(worksheet.Cells[2, 2], worksheet.Cells[ds.Tables[0].Rows.Count + 1, 2]);
           //    rg.NumberFormat = "00000000";
           //}

           if (saveFileName != "")
           {
               try
               {
                   workbook.Saved = true;
                   workbook.SaveCopyAs(saveFileName);
                   //fileSaved = true;
               }
               catch (Exception ex)
               {
                   //fileSaved = false;
                   MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
               }

           }
           //else
           //{
           //    fileSaved = false;
           //}
           xlApp.Quit();
           GC.Collect();//强行销毁 
           // if (fileSaved && System.IO.File.Exists(saveFileName)) System.Diagnostics.Process.Start(saveFileName); //打开EXCEL
           MessageBox.Show(fileName + "保存成功", "提示", MessageBoxButtons.OK);
       }

       #endregion

 

5万条数据性能测试

下面附上源码,里面有NPOI和普通导出excel的性能比较。

下载源码 如果您觉的文章不错,请点击推荐!

 

 

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: WPF是一种用于开发桌面应用程序的技术,而NPOI是一个用于处理Excel文件的开源。通过结合使用WPF和NPOI,我们可以在WPF应用程序中实现Excel文件的导入导出功能。 要使用NPOI导入Excel文件,首先需要引入NPOI。我们可以通过NuGet包管理器将NPOI添加到我们的WPF项目中。然后,我们可以使用NPOI的API来读取和解析Excel文件。我们需要创建一个Workbook对象,并选择要读取的特定Sheet,然后使用循环遍历每一行,并读取每个单元格的值。 在WPF中,我们可以创建一个界面并添加一个按钮,用于触发Excel文件导入功能。当用户点击按钮时,我们将使用NPOI打开文件选择对话框,允许用户选择要导入Excel文件。一旦我们获取了用户选择的文件路径,我们可以使用NPOI的API来读取Excel文件,然后将数据绑定到WPF应用程序中的相应控件上。 要使用NPOI导出Excel文件,在WPF中,我们可以将数据绑定到DataGrid或ListView等控件上。当用户点击导出按钮时,我们可以使用NPOI的API来创建一个Workbook对象,并选择要导出的Sheet。然后,我们可以使用循环遍历来将数据从WPF控件中导出Excel文件的每一行。 最后,我们可以将导出Excel文件保存到硬盘上的特定路径。使用NPOI的API,我们可以设置导出文件的格式和样式,例如设置单元格的字体、颜色、边框等。 总之,通过使用NPOI,我们可以在WPF应用程序中实现Excel文件的导入导出功能。这个过程涉及到引入NPOI、读取和解析Excel文件、将数据绑定到WPF控件上、使用NPOI导出数据到Excel文件等步骤。 ### 回答2: WPF是一种用于构建Windows应用程序的开发框架,而NPOI是一个支持读取和写入Microsoft Office格式文件的使用NPOI可以在WPF应用程序中实现Excel文件的导入导出功能。 首先需要在WPF项目中引用NPOI,可以通过NuGet包管理器或手动引用DLL文件的方式进行添加。 要导入Excel文件,我们可以使用NPOI提供的类来读取和解析文件。首先需要创建一个ExcelWorkbook对象,然后通过获取工作表和行、单元格的方式来获取数据。可以使用循环遍历的方法将数据导入到WPF应用程序中的数据结构中,如数据表或集合。 要导出Excel文件,我们可以使用NPOI提供的类来创建和写入Excel文件。首先需要创建一个ExcelWorkbook对象,然后创建工作表和行对象,并将数据写入到单元格中。最后,可以使用流将Excel文件保存到指定的位置。 需要注意的是,导入导出Excel文件时需要处理一些异常情况,如文件格式错误、IO异常等,可以使用try-catch语句来捕获并处理这些异常。 总结来说,使用NPOI可以方便地在WPF应用程序中实现Excel文件的导入导出功能。通过引用NPOI,并使用它提供的类和方法,我们可以读取和解析Excel文件的数据,以及创建和写入Excel文件。这使得我们可以更加灵活和高效地处理Excel文件,满足特定的需求。 ### 回答3: WPF是一种使用XAML语言和.NET框架开发桌面应用程序的技术。NPOI是一个用于操作Microsoft Office格式文件的开源,可以在WPF应用程序中使用NPOI来实现Excel文件的导入导出。 在使用NPOI导入Excel文件时,首先需要引入NPOI的相关命名空间,然后通过创建一个Workbook对象来加载Excel文件。可以使用Workbook的GetSheetAt方法获取具体的工作表,并通过遍历行和列的方式获取单元格的数据。再通过将数据存储到一个集合或数据表中,便可以在WPF应用程序中进行进一步的处理和展示。 在使用NPOI导出Excel文件时,首先需要创建一个Workbook对象,并在其中创建一个工作表。然后通过遍历数据集合或数据表,使用NPOI提供的方法在工作表中添加行和列,并设置相应的单元格数值。最后,使用Workbook的Write方法将数据写入到Excel文件中,并通过保存文件的方式实现导出功能。 此外,还可以根据需求设置单元格的样式、字体、颜色等属性,以及合并单元格、设置边框等操作。通过熟悉NPOI的API文档,可以灵活地操作Excel文件,并在WPF应用程序中实现导入导出Excel的功能。 总之,通过使用NPOI,可以在WPF应用程序中方便地实现Excel文件的导入导出功能,提高了应用程序的灵活性和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值