zoukankan      html  css  js  c++  java
  • C# 将list集合中的信息保存到Excel中

    程序中下载数据时,一般会将数据库中的信息保存到excel中。本例中,将list集合Student对象中的属性保存到excel中。展示如下:

    需要添加Com组件,并引入excel命名空间。using Microsoft.Office.Interop.Excel;

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    using System.Drawing;//Image
    using System.IO;//File
    using Models.Ext;
    using Microsoft.Office.Interop.Excel;
    using System.Diagnostics;//Process
    using System.ComponentModel;//Win32Exception

    namespace Common
    {
    public class ExcelPrint
    {
    /// <summary>
    /// 将数据保存到Excel中
    /// </summary>
    /// <param name="objStudent">待保存数据</param>
    /// <param name="fileName">保存文件名(含路径)</param>
    public void FileSave(List<StudentExt> list, string fileName)
    {
    KillProcess("EXCEL");

    
    

    //创建Excel工作簿对象
    Microsoft.Office.Interop.Excel.Application excelApp = new Application();

    
    

    // 设置禁止弹出保存和覆盖的询问提示框
    excelApp.DisplayAlerts = false;
    excelApp.AlertBeforeOverwriting = false;

    
    

    //创建工作簿集workbooks
    Workbooks objBooks = excelApp.Workbooks;
    //创建一个工作簿workbook
    //Workbook objBook = objBooks.Add();添加一个新的工作簿
    Workbook objBook = objBooks.Open(fileName);//打开原来存在的Excel工作簿

    
    

    //保留第一个sheet
    Worksheet objSheet = null;
    int sheetCount = objBook.Sheets.Count;
    for (int i = sheetCount; i >1; --i)
    {
    objSheet = objBook.Sheets.Item[i];
    objSheet.Delete();
    }
    //复制第一个表的格式
    Worksheet originSheet = objBook.Sheets.Item[1];//定位第一个sheet
    Worksheet currentSheet = null;
    //根据传入的list参数集合,新增sheet
    for (int i = 1; i <= list.Count; ++i)
    {
    originSheet.Copy(After: objBook.Sheets.Item[objBook.Sheets.Count]);//将第一个sheet复制到最后面
    currentSheet = objBook.Sheets.Item[objBook.Sheets.Count];//获得最新生成的sheet
    currentSheet.Name = list[i - 1].ObjStudent.StudentName;//重新命名
    //写入学员信息
    currentSheet.Cells[2, 2] = list[i - 1].ObjStudent.StudentName;
    currentSheet.Cells[2, 4] = list[i - 1].ObjStudent.Gender;
    currentSheet.Cells[3, 2] = list[i - 1].ObjStudent.StudentId;
    currentSheet.Cells[3, 4] = list[i - 1].ClassName;
    currentSheet.Cells[4, 2] = list[i - 1].ObjStudent.Age;
    currentSheet.Cells[4, 4] = list[i - 1].ObjStudent.CardNo;
    currentSheet.Cells[5, 2] = list[i - 1].ObjStudent.Birthday;
    currentSheet.Cells[5, 4] = list[i - 1].ObjStudent.PhoneNumber;
    currentSheet.Cells[6, 2] = "'" + list[i - 1].ObjStudent.StudentIdNo;
    currentSheet.Cells[7, 2] = list[i - 1].ObjStudent.StudentAddress;
    //保存图片
    if (list[i - 1].ObjStudent.StuImage != null && list[i - 1].ObjStudent.StuImage.Length != 0)
    {
    Image objImage = (Image)new Common.SerializeObjectToString().DeserializeObject(list[i - 1].ObjStudent.StuImage);
    string path = fileName.Substring(0, fileName.LastIndexOf("\"));
    if (File.Exists(path + "\Student.jpg"))
    File.Delete(path + "\Student.jpg");
    else
    {
    objImage.Save(path + "\Student.jpg");
    currentSheet.Shapes.AddPicture(path + "\Student.jpg", Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, 285, 47, 70, 80);
    File.Delete(path + "\Student.jpg");
    }
    }
    }

    //另存为+关闭
    objBook.SaveAs(fileName);
    objBook.Close();

    
    

    //关闭Excel进程
    excelApp.Quit();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);

    
    

    //关闭Excel任务管理器中的Excel进程,(有时候任务管理器中依旧存在Excel进程)不知道有没有用
    KillProcess("EXCEL");

    
    

    #region excel其他操作
    //增加工作表worksheet
    //Worksheet objSheet = (Worksheet)excelApp.Worksheets.Add(Type.Missing,Type.Missing, 1,XlSheetType.xlWorksheet);

    
    

    //另存为+关闭
    //string excelPath = Environment.CurrentDirectory;
    //string file = fileName.Substring(fileName.LastIndexOf("\") + 1);文件名

    
    

    //打开Excel
    //excelApp.Visible = true;
    #endregion
    }
    /// <summary>
    /// C#关闭指定进程
    /// </summary>
    /// <param name="strProcessesByName"></param>
    public void KillProcess(string strProcessesByName)
    {
    foreach (Process p in Process.GetProcesses())
    {
    if (p.ProcessName.ToUpper().Contains(strProcessesByName))
    {
    try
    {
    p.Kill();
    p.WaitForExit();//possibly with a timeout
    }
    catch (Win32Exception ex)
    {
    System.Windows.Forms.MessageBox.Show(ex.Message);//process was terminatine or can't be terminated -deal with it
    }
    catch(InvalidOperationException ex)
    {
    System.Windows.Forms.MessageBox.Show(ex.Message);//process has already exited-might be able to let this one go
    }
    }
    }
    }
    }
    }

     
  • 相关阅读:
    tp5 引入 没有命名空间的类库的方法(以微信支付SDK为例)
    VMware虚拟机安装黑苹果MacOS Mojave系统详细教程
    本文实例讲述了PHP7基于curl实现的上传图片功能-formdata格式上传图片
    宝板面板无法安装,宝塔无法更新安装插件,比如无法安装ftp插件,通过更换hosts指向就可以了
    destoon GBK版本dhtmlspecialchars函数 bug
    有以下40个迹象表明你还是PHP菜鸟
    对高访问量与庞大数据处理的网站系统结构分析
    加入收藏与设为首页JS兼容简易效果
    html让没有宽高限制的图片居中
    PHP识别url重写请求
  • 原文地址:https://www.cnblogs.com/pandora2050/p/13664906.html
Copyright © 2011-2022 走看看