功能需求
获取上传的 excel 文件的所有文本信息并存储到数据库里,可以进一步实现对文件内容资料关键字查询的全文检索。有助于我们定位相关文档,基本实现的步骤如下:
1、上传 excel 文件,获取二进制数据并创建副本文件。
2、将excel 副本文件通过 com api 导出到指定的文本文件。
3、获取文本文件的内容字符串并存储到数据库中。
范例运行环境
操作系统: windows server 2019 datacenter
操作系统上安装 office excel 2016
数据库:microsoft sql server 2016
.net版本: .netframework4.7.1 或以上
开发工具:vs2019 c#
关键代码
组件库引入
获取excel文件的文本内容
getexcelcontent 方法返回 string 类型内容,即表示excel 文件的文本内容,说明如下表:
序号 | 参数名 | 类型 | 说明 |
---|---|---|---|
1 | _filename | string | 文件名为全路径文件信息,方法会根据文件路径创建_path+system.guid.newguid()+".txt" 的临时目标文件路径,导入excel文件到 excel application ,使用 saveas com api 导出目标文本文件,再获文本文件内容,删除目标文本临时文件,将文件内容字符串返回。 |
实现代码如下:
public string getexcelcontent(string _filename) { object nothing=system.reflection.missing.value; string _txtfile="",_path=path.getdirectoryname(_filename)+"\\",_ext=""; if(!directory.exists(_path)) { directory.createdirectory(_path); } _txtfile=_path+system.guid.newguid()+".txt"; object filename=_filename; //创建一个名为excelapp的组件对象 datetime beforetime=datetime.now; excel.application excel=new excel.application(); excel.displayalerts=false; excel.asktoupdatelinks=false; excel.visible=true; datetime aftertime=datetime.now; excel.workbook xb=excel.workbooks.add(filename); worksheet worksheet = (worksheet) excel.activesheet; sheetcount=excel.sheets.count; worksheet.activate(); worksheet.saveas(@_txtfile,xlfileformat.xlunicodetext, missing.value, missing.value, missing.value, missing.value, missing.value, missing.value, missing.value, missing.value); fileex fe=new fileex(); excel.workbooks.close(); string rv=fe.loadfromfile(@_txtfile,encoding.unicode); file.delete(@_txtfile); excel.quit(); if(worksheet != null) { system.runtime.interopservices.marshal.releasecomobject(worksheet); worksheet = null; } if(xb != null) { system.runtime.interopservices.marshal.releasecomobject(xb); xb = null; } if(excel != null) { system.runtime.interopservices.marshal.releasecomobject(excel); excel = null; } gc.collect(); killprocessbystarttime("excel",beforetime,aftertime); return rv; } public string killprocessbystarttime(string processname,datetime beforetime,datetime aftertime) { process[] ps = process.getprocesses(); foreach (process p in ps) { if(p.processname.toupper()!=processname) continue; if(p.starttime > beforetime && p.starttime < aftertime) { try { p.kill(); } catch(exception e) { return e.message; } } } return ""; }
其中 killprocessbystarttime 用于关闭未释放的excel应用进程。
总结
以上代码我们提供了一些操作 excel 的api关键方法,后续我们可以将文本内容存储到数据库中,查询或下载,可以参考我的文章:
关于 excel 文件导出方法可参考如下官方文档:
worksheet.saveas 方法 (excel) | microsoft learn
到此这篇关于c#获取excel文件所有文本数据内容的示例代码的文章就介绍到这了,更多相关c#获取excel数据内容内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论