因为项目需要在导出数据到EXECL文档的同时还需要导出图片进去,在处理是遇到的一些问题,在此记录一下。

首先代码写好之后放测试服务器上去执行的时候报错了,报检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。

这个解决方法我基本上是按照网上来进行解决的,但是需要注意的就是,设置完权限之后,还需要在服务器安装的office文件夹分配权限。

权限问题设置完之后就是调试代码了,网上搜索到的资料都是先插入数据,然后在数据的最后插入图片,而不是我想要的每一行都有图片,所以不符合我的需求,于是就自己看着网上的代码整吧整吧。

  1. /// <summary>
  2. ///
  3. /// </summary>
  4. /// <param name="dt">数据源</param>
  5. /// <param name="filepath">文件路劲例如(E:\\Execl\\201706070001.xls)</param>
  6. protected void ExportExcel(DataTable dt, string filepath)
  7. {
  8.  
  9. if (dt == null || dt.Rows.Count == ) return;
  10.  
  11. Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
  12. object m_objOpt = System.Reflection.Missing.Value;
  13. if (xlApp == null)
  14. {
  15. return;
  16. }
  17.  
  18. //System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;
  19.  
  20. System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
  21.  
  22. Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
  23.  
  24. Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
  25.  
  26. Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[];
  27.  
  28. Microsoft.Office.Interop.Excel.Range range;
  29.  
  30. long totalCount = dt.Rows.Count;
  31.  
  32. long rowRead = ;
  33.  
  34. for (int i = ; i < dt.Columns.Count; i++)
  35.  
  36. {
  37.  
  38. worksheet.Cells[, i + ] = dt.Columns[i].ColumnName;
  39.  
  40. range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[, i + ];
  41.  
  42. range.Interior.ColorIndex = ;
  43.  
  44. }
  45.  
  46. for (int r = ; r < dt.Rows.Count; r++)
  47. {
  48. for (int i = ; i < dt.Columns.Count; i++)
  49. {
  50. try
  51. {
  52. if (i == )
  53. {
  54. range = worksheet.get_Range("E" + (r + ), m_objOpt); //这里是因为我要给文档的E列插入图片,所以加了判断,并写死了E列
  55. range.Select();
  56. float PicLeft, PicTop;
  57. PicLeft = Convert.ToSingle(range.Left);
  58. PicTop = Convert.ToSingle(range.Top);
  59.  
  60. range.ColumnWidth = ;//设置单元格的宽
  61. range.RowHeight = ;//设置单元格的高
  62.  
  63. worksheet.Shapes.AddPicture(dt.Rows[r][i].ToString(), Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, PicLeft, PicTop, , );//这后面的100 是设置图片的宽高
  64. }
  65. else
  66. worksheet.Cells[r + , i + ] = dt.Rows[r][i].ToString();
  67. }
  68. catch
  69. {
  70. worksheet.Cells[r + , i + ] = dt.Rows[r][i].ToString().Replace("=", "");
  71. }
  72. }
  73. rowRead++;
  74. }
  75.  
  76. xlApp.Visible = true;
  77.  
  78. workbook.Saved = true;
  79.  
  80. workbook.SaveAs(filepath);
  81.  
  82. workbook.Close(true, Type.Missing, Type.Missing);
  83.  
  84. workbook = null;
  85.  
  86. xlApp.Quit();
  87.  
  88. xlApp = null;
  89. }

向EXECL文件中导入数据的同时插入图片的更多相关文章

  1. SQLite从Excel文件中导入数据

    元数据 另存为.csv格式 用记事本打开 打开后的数据 Android客户端开发的时候使用了SQLite数据库,为了测试,需要将一些excel文件中的数据导入到数据库的表中,下面是几个步骤: 数据库表 ...

  2. 用代码从文件中导入数据到SQL Server

    引言 导入数据到SQL Server 是常见的需求,特别是定期导入这种需求. 对于定期导入主要有以下几种方式可选择: Bulk Insert Bcp Utility OpenRowSet 写程序导入( ...

  3. python取出前端传入execl文件中的数据

    from openpyxl import load_workbook #获取前台传入的文件 uploadedFile = request.FILES.get('file') #获取execl文件 wb ...

  4. python从Microsoft Excel文件中导入数据

    excel中后缀为csv和xls,二者区别如下:1.xls 文件就是Microsoft excel电子表格的文件格式.2.csv是最通用的一种文件格式,它可以非常容易地被导入各种PC表格及数据库中. ...

  5. MySQL mysqlimport 从txt文件中导入数据到mysql数据库

    mysqlimport: 我说这个我们还是先从世界观方法论的高度来理解一下便有更加准确的把握.数据导入不外呼有两个部分 第一部分:目标对象--我们要把数据导给谁(mysqlimport 的目标对象自然 ...

  6. 使用跨平台图表控件TeeChart如何从DAT或TEXT文件中导入数据

    大多数开发人员在使用TeeChart进行开发的时候,都需要访问包含在文本文档中的一些数据,本次教程将详细讲解如何去实现这一步骤. 文本文件通常包含使用空格键或者是TAB键分隔开的数字和文字: TeeC ...

  7. 使用xlrd模块从excel文件中导入数据

  8. mysql从文件中导入数据

    linux: load data infile '/tmp/dnslog.txt' into table dnslog_cnnic_cn fields terminated by ' ' lines ...

  9. 使用json文件给es中导入数据

    使用json文件可以给es中导入数据,10万条左右的数据可以一次导入,数量太大时导入就会报错.大数量的到导入还是需要用bulk方式. accounts.json文件格式如下: {"index ...

随机推荐

  1. Xamarin.Forms+Prism(3)—— 简单提示UI的使用

    这次给大家介绍两个比较好用的提示插件,如成功.等待.错误提示. 准备: 1.新建一个Prism Xamarin.Forms项目: 2.右击解决方案,添加NuGet包: 1)Acr.UserDialog ...

  2. cookie方法封装及cookie缺点分析

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Consolas; color: #4f5d66 } p.p2 { margin: 0.0px ...

  3. 商城项目实战 | 2.2 Android 仿京东商城——自定义 Toolbar (二)

    本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 上一篇文章<商城项目实战 | 2.1 Android 仿京东商城 ...

  4. final修饰的变量是引用不能变还是对象的内容不能变?

    int a=1;此时a是变量: StringBuffer a=new StringBuffer();此时a就是引用变量,可以说是a引用String对象,通过a来操作String 对象 final St ...

  5. [ext4] 磁盘布局 - extent tree

    传统的类Unix文件系统,比如Ext3,都是使用一个间接数据块映射表来记录每一个数据块的分配情况的.但是这种机制对于超大文件的存储是有缺陷的,特别是当对超大文件进行删除和截断操作时.映射表会对每一个数 ...

  6. 如何使用python生成xml

    最近要用python生成一个xml格式的文件.因为有一些内容是中文,原来的xml文件中使用了CDATA 的部分. 而之前的python程序所用的库中没有 创建这个区域的方法.无奈研究了大半天. 最后用 ...

  7. WebStorm设置左侧菜单栏背景和字体设置

    WebStorm左侧菜单栏 webstorm是一款前端IDE利器,个人感觉黑色的背景比较炫酷,刚开始从网上下载的主题只能修改编辑窗口的背景色,经过查询资料终于把左边菜单栏的背景色也修改了. 第一步:点 ...

  8. python3.x中如何实现print不换行

    大家应该知道python中print之后是默认换行的, 那如何我们不想换行,且不想讲输出内容用一个print函数输出时,就需要改变print默认换行的属性, 方法如下: print('contents ...

  9. scrapy(一)建立一个scrapy项目

    本项目实现了获取stack overflow的问题,语言使用python,框架scrapy框架,选取mongoDB作为持久化数据库,redis做为数据缓存 项目源码可以参考我的github:https ...

  10. UIView的属性

    .alpha 设置视图的透明度.默认为1. // 完全透明 view.alpha = ; // 不透明 view.alpha = ; .clipsToBounds // 默认是NO,当设置为yes时, ...