前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C# 获取 Excel 文件的所有文本数据内容

C# 获取 Excel 文件的所有文本数据内容

作者头像
初九之潜龙勿用
发布2024-08-05 10:06:25
650
发布2024-08-05 10:06:25
举报
文章被收录于专栏:技术文章

功能需求

获取上传的 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 导出目标文本文件,再获文本文件内容,删除目标文本临时文件,将文件内容字符串返回。

实现代码如下:

代码语言:javascript
复制
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关键方法,后续我们可以将文本内容存储到数据库中,查询或下载,可以参考我的文章:

《C# 将 Word 转文本存储到数据库并进行管理》

关于 EXCEL 文件导出方法可参考如下官方文档:

https://learn.microsoft.com/zh-cn/office/vba/api/excel.worksheet.saveas?redirectedfrom=MSDN

代码这里仅供大家参考,我们可以根据需求调整输出参数类型,欢迎大家评论指教!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 功能需求
  • 范例运行环境
  • 关键代码
    • 组件库引入
      • 获取Excel文件的文本内容
      • 总结
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档