近来在一直研究导出Excel的东东,整的我晕头转向,项目中需要把表格数据和图片同时导入到一个Excel文件里,然后保存在本地。如果是简单的表头是很容易导出的,由于表头包含复杂的,就需要通过xml形式解析,然后导入到Excel,然而导入图片这种方式行不通,只能才去其它的形式。

  本人思路是这样的:先将表格里的数据通过xml的形式导入到Excel文件里并保存,然后打开重新打开这个Excle文件,在把之前保存的图片插入到这个Excel文件里,客户端就可以下载这个Excel文件,记得下载后删除原来保存的图片和Excel文件。

  在这就主要讲一下打开Excel文件和插入图片:

代码

1 public static bool insertPic(string AbosultedFilePath, string fileName, float cWidth, float cHeight)
2 {
3 object m_objOpt = System.Reflection.Missing.Value;
4 //检查Excel文件是否存在,如果不存在,则退出
5   if (!File.Exists(AbosultedFilePath + fileName + ".xls"))
6 return false;
7
8 //创建Excel应用程序对象,如果未创建成功则退出
9   Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
10 if (xlApp == null)
11 {
12 System.Web.HttpContext.Current.Response.Write("无法创建Excel对象,可能你的电脑未装Excel");
13 return false;
14 }
15
16 Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
17 Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Open(AbosultedFilePath + fileName + ".xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
18 Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1]; //取得sheet1
19 worksheet.Shapes.AddPicture(AbosultedFilePath + fileName + ".jpg", MsoTriState.msoFalse, MsoTriState.msoTrue, 5, 5, cWidth, cHeight);
20
21 try
22 {
23 workbook.Saved = true;
24 workbook.SaveAs(AbosultedFilePath + fileName + ".xls", m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
25 }
26 catch (Exception ex)
27 {
28 System.Web.HttpContext.Current.Response.Write("导出文件时出错,文件可能正被打开!\n" + ex.ToString());
29 return false;
30 }
31
32 workbooks.Close();
33
34 if (xlApp != null)
35 {
36 xlApp.Workbooks.Close();
37 xlApp.Quit();
38
39 int generation = System.GC.GetGeneration(xlApp);
40 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
41
42 xlApp = null;
43 System.GC.Collect(generation);
44 }
45 GC.Collect(); //强行销毁
46
47 #region 强行杀死最近打开的Excel进程
48 System.Diagnostics.Process[] excelProc = System.Diagnostics.Process.GetProcessesByName("EXCEL");
49 System.DateTime startTime = new DateTime();
50 int m, killID = 0;
51 for (m = 0; m < excelProc.Length; m++)
52 {
53 if (startTime < excelProc[m].StartTime)
54 {
55 startTime = excelProc[m].StartTime;
56 killID = m;
57 }
58 }
59 if (excelProc[killID].HasExited == false)
60 {
61 excelProc[killID].Kill();
62 }
63 #endregion
64
65 if (File.Exists(AbosultedFilePath + fileName + ".jpg"))
66 {
67 File.Delete(AbosultedFilePath + fileName + ".jpg");
68 }
69
70 if (saveExcel(AbosultedFilePath + fileName + ".xls"))
71 {
72 File.Delete(AbosultedFilePath + fileName + ".xls");
73 return true;
74 }
75 else
76 {
77 return false;
78 }
79 }
80
81 public static bool saveExcel(string FileName)
82 {
83 try
84 {
85 string FullFileName = FileName;
86 //FileName--要下载的文件名
87 FileInfo DownloadFile = new FileInfo(FullFileName);
88 if (DownloadFile.Exists)
89 {
90 System.Web.HttpContext curContext = System.Web.HttpContext.Current;
91 curContext.Response.Clear();
92 curContext.Response.ClearHeaders();
93 curContext.Response.Buffer = false;
94 curContext.Response.ContentType = "application/octet-stream";
95 curContext.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(DownloadFile.FullName, System.Text.Encoding.ASCII));
96 curContext.Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());
97 curContext.Response.WriteFile(DownloadFile.FullName);
98 curContext.Response.Flush();
99 curContext.Response.End();
100 DownloadFile.Delete();
101 return true;
102 }
103 else
104 {
105 //文件不存在
106 return false;
107 }
108 }
109 catch
110 {
111 //打开时异常了
112 return false;
113 }
114 }

下面说一下Workbooks.Open的参数,也是参考了他人文章

 Open()   方法  ,打开一个Excel工作簿。

语法   
   Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); 
   xlApp.Workbooks.Open(FileName,   UpdateLinks,   ReadOnly,   Format,   Password,   WriteResPassword,   IgnoreReadOnlyRecommended,   Origin,   Delimiter,   Editable,   Notify,   Converter,   AddToMRU)   
参数说明:

xlApp.Workbooks  必选。该表达式返回一个   Workbooks   对象或   RecentFile   对象。   
  FileName         String   类型,必选。要打开的Excel工作簿文件名称。   
  UpdateLinks     Variant   类型,可选。指定文件中的链接的更新方式。如果省略本参数,则提示用户选择链接的更新方式。否则,该参数的取值应为下表的某个值。    
    取值   意义     
      0      不更新任何引用。     
      1      更新外部引用,但不更新远程引用。     
      2      更新外部引用,但不更新外部引用。     
      3      更新所有远程引用和外部引用。     
  如果   Microsoft   Excel   正在打开以   WKS、WK1   或   WK3   格式存储的文件并且   UpdateLinks   参数设为   2,则   Microsoft   Excel   根据与该文件关联的图形创建图表。如果该参数设为   0,则不创建任何图表。   
  ReadOnly     Variant   类型,可选。如果为   True   则以只读模式打开工作簿。   
  Format     Variant   类型,可选。如果   Microsoft   Excel   正在打开一个文本文件,则该参数用于指定分隔字符,如下表所示。如果省略本参数,则使用当前的分隔字符。   
    取值   分隔字符     
     1       制表符     
           2      逗号     
           3      空格     
           4      分号     
           5      没有分隔符     
           6      自定义字符(参阅   Delimiter   参数)     
  Password     Variant   类型,可选。该字符串为用于打开一个受保护工作簿的密码。如果省略该参数并且指定工作簿已设置密码,则提示用户输入密码。   
  WriteResPassword     Variant   类型,可选。该字符串为一个写保护工作簿的写入权密码。如果省略该参数并且指定工作簿已设置密码,则提示用户输入密码。   
  IgnoreReadOnlyRecommended     Variant   类型,可选。如果为   True   则设置   Microsoft   Excel   不显示建议只读消息(如果该工作簿以“建议只读”选项保存)。   
  Origin     Variant   类型,可选。如果该文件为文本文件,则该参数用于指示该文件的来源于何种操作系统(以便对代码页和回车/换行(CR/LF)进行正确映射)。可为下列   XlPlatform   常量之一:   xlMacintosh、xlWindows   或   xlMSDOS。如果省略本参数,则使用当前操作系统。    
  Delimiter     Variant   类型,可选。如果该文件为文本文件并且   Format   参数设为   6,则此参数用于指定用作分隔符的字符。例如,可使用   Chr(9)   代表制表符,使用“,”代表逗号,使用“;”代表分号或者使用自定义字符。如果该参数为字符串,则只使用该字符串的第一个字符。   
  Editable     Variant   类型,可选。如果该文件为   Microsoft   Excel   4.0   加载宏,则该参数为   True   时可在可见窗口中打开该加载宏。如果该参数设为   False   或者省略该参数,则该加载宏以隐藏方式打开,并且不能设为可见。本选项不能应用于由   Microsoft   Excel   5.0   或更高版本的   Microsoft   Excel   创建的加载宏。如果该文件是   Excel   模板,则参数为   True   时,会打开指定模板进行编辑。参数为   False   时,可根据指定模板打开新的工作簿。默认值为   False。   
  Notify     Variant   类型,可选。如果该文件不能以可读写模式打开,则若该参数设为   True   可将该文件添加到文件通知列表。Microsoft   Excel   将以只读模式打开该文件并轮询文件通知列表,当文件通知列表中的该文件可用时则通知用户。如果该参数设为   False,或者省略该参数,则不请求任何通知,并且不能打开任何不可用的文件。   
  Converter     Variant   类型,可选。打开文件时试用的第一个文件转换器的索引号。首先使用的是指定的文件转换器;如果该转换器不能识别此文件,则试用所有的转换器。转换器索引号由   FileConverters   方法所返回的转换器行号组成。     
  AddToMru     Variant   类型,可选。如果为   True   则将该工作簿添加到最近使用文件列表中。默认值为   False。

如果大家还有其它好的方法,或者文章中有错误,请提出指正。 

转载于:https://www.cnblogs.com/ZHF/archive/2010/10/09/1846692.html

打开Excel文件并插入图片相关推荐

  1. MFC Office读写Excel文件,插入图片

    简述 在 Java 中对 Excel 操作很方便,但是在 C++ 中对 Excel 操作却不是那么方便了,C++ 中有几种方法可以对 Excel 操作,但是大部分方法要么是读写较慢,要么是操作的功能不 ...

  2. 给原有的excel文件中插入图片

    public static void main(String[] args) {FileOutputStream fileOut = null;BufferedImage bufferImg = nu ...

  3. 向Excel中批量插入图片,自动排版

    一.安装软件 向Excel中批量插入图片,需要用到一个工具"E灵",您只需百度搜索"罗刚君E灵" 5个字即可找到下载地址,也可以在以下网站找到: http:// ...

  4. Excel单元格插入图片并实现单击放大或缩小功能(含VBA代码)

    文章目录 0 引言 1 提前准备VBA代码 1.1 ThisWorkbook的代码: 1.2 模块的代码: 2 设置步骤 2.1 VBA代码设置单元格 2.2 插入图片到单元格 2.3 以启用宏的方式 ...

  5. python将excel转换成图片_python-尝试将Excel文件保存为图片并加上水印

    python-尝试将Excel文件保存为图片并加上水印 场景:并不是将 excel 的 chart 生成图片,而是将整个表格内容生成图片. 1. 准备工作 目前搜索不到已有的方法,只能自己尝试写一个, ...

  6. Excel 文件怎么批量插入首页、扉页、尾页?怎么将某个 Excel 文件批量插入到其它 Excel 文件的指定位置?

    概要:在我们日常办公中,经常会碰到需要给一批 Excel 文件批量插入首页或者尾页,或者在指定的位置插入新的 Sheet 的需求.「我的ABC软件工具箱」就实现了批量在指定位置插入新的内容的功能,可以 ...

  7. python将excel转换成图片_python-尝试将Excel文件保存为图片并加上水印-阿里云开发者社区...

    python-尝试将Excel文件保存为图片并加上水印 场景:并不是将 excel 的 chart 生成图片,而是将整个表格内容生成图片. 1. 准备工作 目前搜索不到已有的方法,只能自己尝试写一个, ...

  8. 当Excel文件中包含图片时转pdf

    当Excel文件中包含图片时转pdf excel文件转pdf时,有很多工具可以使用,但是我在实际运用过程中发现,如果excel文件包含图片时,并不能是吸纳很好的效果.我的解决思路是:excel中的非图 ...

  9. 压缩 Excel 文件中的图片

    压缩 Excel 文件中的图片 1. 图片工具 -> 格式 打开 Excel 文件,选中任一图片.查看图片工具 -> 格式. 2. 压缩图片 不选择 仅用于所选图片,就是默认压缩所有图片. ...

最新文章

  1. 由MessageBox和AfxMessageBox的使用异同所感
  2. Tungsten Replicator 多环境复制工具安装方法
  3. 关于如何用100行如何实现docker
  4. 【计算机视觉】跟踪算法及相关主页
  5. boost::shared_mutex相关的测试程序
  6. 【视频】谷歌大佬30分钟让你入门机器学习(2019谷歌I/O资源分享)
  7. 通过服务器端日志分析WebSocket的server和client交互
  8. mysql 数据库名称限制_mysql 数据库名称限制
  9. 学习C ,常见的误解
  10. !DOCTYPE标签的定义与用法
  11. Java中InputStream 、 InputStreamReader 、 BufferedReader的区别
  12. [转] 驱动模拟键盘鼠标
  13. 【老生谈算法】matlab实现免疫算法源码——免疫算法
  14. 维修三菱油妍服务器,三菱油研伺服驱动器常见报警AL17,AL19,AL1A
  15. 如何注册微信小程序的开发账号
  16. JWT全面解读、详细使用步骤
  17. 这可能是最全最好的BLAST教程
  18. 求定积分的不太常见的方法
  19. try/catch 的解释与用法
  20. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) 题解

热门文章

  1. 5v可编程rgb接口_电脑的各个接口详解,不懂电脑的白小必备干货知识
  2. python构造一个二叉树_如何用python构造一个n层的完全二叉树
  3. python上机实验报告读取文件_Python程序设计实验报告八 : 文件
  4. 16年寒假随笔(4)
  5. Dlib——C++机器学习库,有传统机器学习的,也有深度学习的
  6. Python:SMOTE算法——样本不均衡时候生成新样本的算法
  7. mongodb存储二进制数据的二种方式——binary bson或gridfs
  8. python爬取电影网站信息并写入文件
  9. python3.x中如何实现print不换行
  10. 求职必备:如何用产品思维写简历