因为项目需要在导出数据到execl文档的同时还需要导出图片进去,在处理是遇到的一些问题,在此记录一下。
首先代码写好之后放测试服务器上去执行的时候报错了,报检索 com 类工厂中 clsid 为 {00024500-0000-0000-c000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。
这个解决方法我基本上是按照网上来进行解决的,但是需要注意的就是,设置完权限之后,还需要在服务器安装的office文件夹分配权限。
权限问题设置完之后就是调试代码了,网上搜索到的资料都是先插入数据,然后在数据的最后插入图片,而不是我想要的每一行都有图片,所以不符合我的需求,于是就自己看着网上的代码整吧整吧。
/// <summary>/// /// </summary>/// <param name="dt">数据源</param>/// <param name="filepath">文件路劲例如(e:\\execl\\201706070001.xls)</param>protected void exportexcel(datatable dt, string filepath)
{if (dt == null || dt.rows.count == 0) return;
microsoft.office.interop.excel.application xlapp = new microsoft.office.interop.excel.application();object m_objopt = system.reflection.missing.value;if (xlapp == null)
{return;
}//system.globalization.cultureinfo currentci = system.threading.thread.currentthread.currentculture;system.threading.thread.currentthread.currentculture = new system.globalization.cultureinfo(en-us);
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];
microsoft.office.interop.excel.range range;long totalcount = dt.rows.count;long rowread = 0;for (int i = 0; i < dt.columns.count; i++)
{
worksheet.cells[1, i + 1] = dt.columns[i].columnname;
range = (microsoft.office.interop.excel.range)worksheet.cells[1, i + 1];
range.interior.colorindex = 15;
}for (int r = 0; r < dt.rows.count; r++)
{for (int i = 0; i < dt.columns.count; i++)
{try{if (i == 4)
{
range = worksheet.get_range(e + (r + 2), m_objopt); //这里是因为我要给文档的e列插入图片,所以加了判断,并写死了e列
range.select();float picleft, pictop;
picleft = convert.tosingle(range.left);
pictop = convert.tosingle(range.top);
range.columnwidth = 60;//设置单元格的宽
range.rowheight = 120;//设置单元格的高worksheet.shapes.addpicture(dt.rows[r][i].tostring(), microsoft.office.core.msotristate.msofalse, microsoft.office.core.msotristate.msoctrue, picleft, pictop, 100, 100);//这后面的100 是设置图片的宽高
}elseworksheet.cells[r + 2, i + 1] = dt.rows[r][i].tostring();
}catch{
worksheet.cells[r + 2, i + 1] = dt.rows[r][i].tostring().replace(=, );
}
}
rowread++;
}
xlapp.visible = true;
workbook.saved = true;
workbook.saveas(filepath);
workbook.close(true, type.missing, type.missing);
workbook = null;
xlapp.quit();
xlapp = null;
}
以上就是怎么在execl文件中同时导入数据和插入图片?的详细内容。