首页 > 编程语言 >c#操作excel方式四-Aspose控件

c#操作excel方式四-Aspose控件

时间:2023-08-08 10:33:10浏览次数:38  
标签:控件 c# Cells excel Aspose new dt Data Columns


 

参考资料: 

这位大大写得不错,还有复杂报表的生成,有兴趣的可以看看


这里还有一篇Aspose基础知识的


方法1:读取excel内容到datable

DataTable _dt_Data;



初始化表的列

private void initDataTable()
        {
            _dt_Data = new DataTable();
            _dt_Data.Columns.Add(new DataColumn("姓名"));
            _dt_Data.Columns.Add(new DataColumn("地址"));
            _dt_Data.Columns.Add(new DataColumn("年龄"));
            _dt_Data.Columns.Add(new DataColumn("性别"));
            _dt_Data.Columns.Add(new DataColumn("专业"));
            _dt_Data.Columns.Add(new DataColumn("班级"));
            _dt_Data.Columns.Add(new DataColumn("学校"));

       
         

        }



遍历excel读取

Workbook wb = new Workbook();
                    wb.Open(fileName);
                    Worksheet ws = wb.Worksheets[0];
                    int iRow = 0;
                    DataRow dr = _dt_Data.NewRow();

                    foreach (Cell c in ws.Cells)
                    {
                        if (c.Column > _dt_Data.Columns.Count - 1)
                        {
                            continue;
                        }
                        if (iRow != c.Row)
                        {
                            _dt_Data.Rows.Add(dr);
                            dr = _dt_Data.NewRow();
                        }

                        dr[c.Column] = c.StringValue;
                        iRow = c.Row;
                    }
                    _dt_Data.Rows.Add(dr);




写入excel:

private void AddExcelSheet(Aspose.Cells.Workbook wk, DataTable dt)
        {
            if (dt == null) return;

            for (int iColumnsCount = 0; iColumnsCount < dt.Columns.Count; iColumnsCount++)
            {
                wk.Worksheets[0].Cells[0, iColumnsCount].PutValue(dt.Columns[iColumnsCount].ColumnName);
            }
            for (int iRowsCount = 0; iRowsCount < dt.Rows.Count; iRowsCount++)
            {
                for (int iColumnsCount = 0; iColumnsCount < dt.Columns.Count; iColumnsCount++)
                {
                    wk.Worksheets[0].Cells[iRowsCount + 1, iColumnsCount].PutValue(dt.Rows[iRowsCount][iColumnsCount].ToString());
                }
            }
        }




Aspose.Cells.Workbook wk = new Aspose.Cells.Workbook();
                AddExcelSheet(wk, _dt_Data);
                wk.Save(strFileName);






方法2:我们直接用这位大大封装的类来实现写入excel和读取excel



1.下载引用:

aspose.cell.dll

 

 

2.添加引用:

c#操作excel方式四-Aspose控件_System

 


c#操作excel方式四-Aspose控件_c#_02

 

3.创建类

c#操作excel方式四-Aspose控件_Data_03

using System.Data;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.IO;
using System.Drawing;

namespace excel4
{
    public class AsposeExcelTools
    {

        public static bool DataTableToExcel(DataTable datatable, string filepath, out string error)
        {
            error = "";
           
                if (datatable == null)
                {
                    error = "DataTableToExcel:datatable 为空";
                    return false;
                }

                Aspose.Cells.Workbook workbook = new Aspose.Cells.Workbook();
                Aspose.Cells.Worksheet sheet = workbook.Worksheets[0];
                Aspose.Cells.Cells cells = sheet.Cells;

                int nRow = 0;
                foreach (DataRow row in datatable.Rows)
                {
                    nRow++;
                   
                        for (int i = 0; i < datatable.Columns.Count; i++)
                        {
                            if (row[i].GetType().ToString() == "System.Drawing.Bitmap")
                            {
                                //------插入图片数据-------
                                System.Drawing.Image image = (System.Drawing.Image)row[i];
                                MemoryStream mstream = new MemoryStream();
                                image.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg);
                                sheet.Pictures.Add(nRow, i, mstream);
                            }
                            else
                            {
                                cells[nRow, i].PutValue(row[i]);
                            }
                        }
                 
                }

                workbook.Save(filepath);
                return true;
            }
        
      
      

        /// 
        /// Excel文件转换为DataTable.
        /// 
        /// Excel文件的全路径
        /// DataTable:返回值
        /// 错误信息:返回错误信息,没有错误返回""
        /// 
  
  
   
   true:函数正确执行 false:函数执行错误
  
  
        public static bool ExcelFileToDataTable(string filepath, out DataTable datatable, out string error)
        {
            error = "";
            datatable = null;
            try
            {
                if (File.Exists(filepath) == false)
                {
                    error = "文件不存在";
                    datatable = null;
                    return false;
                }
                Aspose.Cells.Workbook workbook = new Aspose.Cells.Workbook();
                workbook.Open(filepath);
                Aspose.Cells.Worksheet worksheet = workbook.Worksheets[0];
                datatable = worksheet.Cells.ExportDataTable(0, 0, worksheet.Cells.MaxRow + 1, worksheet.Cells.MaxColumn + 1);
                //-------------图片处理-------------
                Aspose.Cells.Pictures pictures = worksheet.Pictures;
                if (pictures.Count > 0)
                {
                    string error2 = "";
                    //if (InsertPicturesIntoDataTable(pictures, datatable, out datatable, out error2) == false)
                    //{
                    //    error = error + error2;
                    //}
                }
                return true;
            }
            catch (System.Exception e)
            {
                error = e.Message;
                return false;
            }

        }


          }
      
    }

 添加一个opendiog用来选择写入的excel

 

 写入按钮代码:

private void button1_Click(object sender, EventArgs e)
        {
            DataTable dt = new DataTable("test");
            dt.Columns.Add("ID");

            dt.Columns.Add("number");

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
            
                for (int i = 0; i < 100; i++)
                {
                    DataRow dr = dt.NewRow();
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        dr[j] = i.ToString();
                    }
                    dt.Rows.Add(dr);
                }

                string outError = "";

                AsposeExcelTools.DataTableToExcel(dt, openFileDialog1.FileName, out outError);


                if (!string.IsNullOrEmpty(outError))
                {
                    MessageBox.Show(outError);
                }
                else
                {
                    Process.Start(openFileDialog1.FileName);
                }


            }
        }

 

结果:

c#操作excel方式四-Aspose控件_Data_04

 

 

添加一个gridview用来显示读出的数据

 


private void button2_Click(object sender, EventArgs e)
        {
            DataTable dt = new DataTable("test");

            string outError = "";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                AsposeExcelTools.ExcelFileToDataTable(openFileDialog1.FileName,out dt,out outError);

                this.dataGridView1.DataSource = dt;
                this.dataGridView1.DataMember = dt.TableName;
            }


        }

结果:

c#操作excel方式四-Aspose控件_c#_05

 


C# 表格输出 关于引用 Aspose.Cells. 求解答疑惑

 

警告1未能解析引用的程序集“Aspose.Cells”,因为它对不在当前目标框架“.NETFramework,Version=v4.0,Profile=Client”中的“System.Web, 


Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”具有依赖关系。请删除对不在目标框架中的程序集的引用,或考虑重新


确定项目的目标。HandHygiene.UI


解决方法:

出现这个问题是在一用log4net 动态库是出现的


 


原因在于程序的目标是.net 4 framework client profile


 


在项目的属性中 选择.net 4 framework 就OK了。

标签:控件,c#,Cells,excel,Aspose,new,dt,Data,Columns
From: https://blog.51cto.com/u_16218512/7005085

相关文章

  • c#转义符积累
    常用的转义字符及其含义:\’单引号\”双引号\\反斜杠\0空\a警告(产生峰鸣)\b退格\f换页\n换行\r回车\t水平制表符\v垂直制表符c#里@表示的是:在C#中,"c:\\data"表示路径是c:\data;而@"c:\data"就表示c:\data;所以,@的作用就应该是忽略转义字符的作用......
  • c#去html标志,对字符串保留数字小数点,有中文的日期转化等特殊数据处理
    命名空间usingSystem.Text.RegularExpressions;1.我们采集到的数据比如有些日期很不规则带有中文比如2013年5月8日  2013年5月 这里提供把这类不规则的日期转化成datatime类型publicDateTimeConvertTime(stringa){DateTimedt......
  • c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件
     1、引用Microsoft.Office.Interop.Excel.dll2、引用命名空间、使用别名usingSystem.Reflection;usingExcel=Microsoft.Office.Interop.Excel;  3.写入excel写入函数publicvoidToExcel(stringstrTitle){intnMax=9;intnMin=4......
  • 代码覆盖率-Jacoco
    Jacoco1、什么是jacocojacoco是一个免费、开源java代码覆盖率工具。2、什么是代码覆盖率覆盖率是用来衡量测试代码对功能代码的测试情况,通过统计测试中对功能代码中行、分支、类等模拟场景数量,来量化说明测试的充分度。代码覆盖率=代码的覆盖程度,一种度量方式覆盖率简单说:跑......
  • Mac版PDF编辑器-Acrobat Pro DC 2023
    AcrobatProDC2023(pdf编辑器)是一款能让用户轻松创建和编辑多种pdf格式的实用工具,并且能够同时使用各种方法编辑大量pdf文件。AcrobatProDC是Mac上运行速度最快、处理能力最强、功能最丰富的工具之一。AcrobatProDC包括强大的图像编辑工具,可让您轻松编辑图片和视频,而......
  • AutoCAD2024软件Mac中文版最新功能介绍支持M1/2
    AutoCAD2024软件的最新功能,包括行业特定的工具集、新的自动化以及跨设备和Autodesk产品的无缝连接。AutodeskAutoCAD不仅提供出色的绘图功能,而且提供了对工程工具使用方法及工作流程进行全面优化的方式。所有这一切都使用户能够轻松地创建工程应用程序,从而帮助他们提高工作效......
  • C# 读取带CheckBox复选框控件的表格-并集成到Windows Service里面
    最近的项目要求读取xls文件内的单元格,并且单元格旁边会有复选框标识类型。搜了下只有java的POI有例子,NOPI看项目文档好像是没有实现读取控件的功能。java实现POI POI如何解析出excel中复选框是否被选中https://blog.csdn.net/qq_29832217/article/details/104413475 C#导......
  • Siemens 西门子S7-200 PLC使用高速脉冲输入测量瞬时流量
    西门子S7-200PLC高速计数功能除用于常见的运动控制系统转速测量之外,在流量计量方面也有着广泛的用途。由于PLC内部没有相应的算法来计算频率,因此,测定脉冲输出信号的流量计的瞬时流量就需要在STEP7Micro/WINSMART中通过以下三部分编程来实现:1、定义高速计数器计数流量计输出......
  • Mac之入门篇
    简单讲讲mac上几个比较重要的东西:1,homebrewmac上的包管理器,同apt-get,yum等一系列包管理器一同,作为命令行级别的应用商店,在安装软件和配置依赖之时有着不可取代的大用。2,office365中所周知,微软就是macos上程序的最大开发商(......
  • vscode搬家
    1、vscode搬家针对C盘空间不足的伙伴们注意,操作前先关闭vscode1.1、vscode相关目录C:\Users\helper\AppData\Roaming\CodeC:\Users\helper\AppData\Local\Programs\MicrosoftVSCodeC:\Users\helper\.vscode其中helper为当前登录系统的账户1.2、创建存放vscode相关文件......