今天工作中遇到一个需求,就是获取 excel 里面的内容,并且把 excel 另存为 csv,因为本人以前未接触过,所以下面整理出来的代码均来自网络,具体参考链接已丢失,原作者保留所有权利!
例子:
using System; using System.Data;namespace ExportExcelToCode { class ExcelOperater { public void Operater() { // Excel 路径 string excelPath = ""; // Csv 存放路径 string csvPath = "";
// 获取 Excel Sheet 名称列表 string[] sheetNameList = ExcelUtils.GetSheetNameList(excelPath);
if (sheetNameList != null && sheetNameList.Length > 0) { foreach (string sheetName in sheetNameList) { string itemName = sheetName.TrimEnd(new char[] { '$' });
// 解析 Excel 为 DataTable 对象 DataTable dataTable = ExcelUtils.ExcelToDataTable(excelPath, itemName); if (dataTable != null && dataTable.Rows.Count > 0) { // 生成 Csv 文件 ExcelUtils.ExcelToCsv(excelPath, csvPath, itemName, "|#|", 0); } } } } } }
ExcelUtils.cs 文件
using System; using System.Data; using Microsoft.Office.Interop.Excel; using Excel = Microsoft.Office.Interop.Excel;namespace ExportExcelToCode { public partial class ExcelUtils { /// <summary> /// 获取 Sheet 名称 /// </summary> /// <param name="filePath"></param> /// <returns></returns> public static string[] GetSheetNameList(string filePath) { try { string connectionText = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath + ";" + "Extended Properties='Excel 12.0;HDR=YES;IMEX=1';";
System.Data.OleDb.OleDbConnection oleDbConnection = new System.Data.OleDb.OleDbConnection(connectionText);
oleDbConnection.Open();
System.Data.DataTable dataTable = oleDbConnection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); ;
string[] sheetNameList = new string[dataTable.Rows.Count];
for (int index = 0; index < dataTable.Rows.Count; index++) { sheetNameList[index] = dataTable.Rows[index][2].ToString(); }
oleDbConnection.Close();
return sheetNameList; } catch (Exception ex) { return null; } }
/// <summary> /// Excel 转 DataTable /// </summary> /// <param name="filePath"></param> /// <param name="sheetName"></param> /// <returns></returns> public static System.Data.DataTable ExcelToDataTable(string filePath, string sheetName) { try { string connectionText = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath + ";" + "Extended Properties='Excel 12.0;HDR=YES;IMEX=1';"; string selectText = string.Format("select * from [{0}$]", sheetName);
DataSet dataSet = new DataSet();
System.Data.OleDb.OleDbConnection oleDbConnection = new System.Data.OleDb.OleDbConnection(connectionText);
oleDbConnection.Open();
System.Data.OleDb.OleDbDataAdapter oleDbDataAdapter = new System.Data.OleDb.OleDbDataAdapter(selectText, connectionText); oleDbDataAdapter.Fill(dataSet, sheetName);
oleDbConnection.Close();
return dataSet.Tables[sheetName]; } catch (Exception ex) { return null; } }
/// <summary> /// Excel 转 Csv /// </summary> /// <param name="sourceExcelPathAndName"></param> /// <param name="targetCSVPathAndName"></param> /// <param name="excelSheetName"></param> /// <param name="columnDelimeter"></param> /// <param name="headerRowsToSkip"></param> /// <returns></returns> public static bool ExcelToCsv(string sourceExcelPathAndName, string targetCSVPathAndName, string excelSheetName, string columnDelimeter, int headerRowsToSkip) { Excel.Application oXL = null; Excel.Workbooks workbooks = null; Workbook mWorkBook = null; Sheets mWorkSheets = null; Worksheet mWSheet = null;
try { oXL = new Excel.Application(); oXL.Visible = false; oXL.DisplayAlerts = false; workbooks = oXL.Workbooks; mWorkBook = workbooks.Open(sourceExcelPathAndName, 0, false, 5, "", "", false, XlPlatform.xlWindows, "", true, false, 0, true, false, false); mWorkSheets = mWorkBook.Worksheets; mWSheet = (Worksheet)mWorkSheets.get_Item(excelSheetName); Excel.Range range = mWSheet.UsedRange; Excel.Range rngCurrentRow; for (int i = 0; i < headerRowsToSkip; i++) { rngCurrentRow = range.get_Range("A1", Type.Missing).EntireRow; rngCurrentRow.Delete(XlDeleteShiftDirection.xlShiftUp); } range.Replace("\n", " ", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); range.Replace(",", columnDelimeter, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
mWorkBook.SaveAs(targetCSVPathAndName, Excel.XlFileFormat.xlCSV, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, false); return true; } catch (Exception ex) { return false; } finally { if (mWSheet != null) mWSheet = null; if (mWorkBook != null) mWorkBook.Close(Type.Missing, Type.Missing, Type.Missing); if (mWorkBook != null) mWorkBook = null; if (oXL != null) oXL.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(oXL); if (oXL != null) oXL = null; GC.WaitForPendingFinalizers(); GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); } } } }
我有一个由以下字符|分隔的csv文件。该文件有三列;一个是url(COL1),另一个是小文本(COL3),最后一个是图像位置(COL2)。我需要一个脚本,用csv文件中的数据给我这样的html代码: 我该怎么做?
我正在使用snmp4j开发snmp管理器。我需要读取MIB文本文件并生成相应的XML文件。是否有任何SNMP4j库可用于解析Mib文本文件并获取每个对象的数据。如果snmp4j不能解决我的问题,是否有其他类似的开源可用? 谢谢
本文向大家介绍C++生成和解析XML文件的讲解,包括了C++生成和解析XML文件的讲解的使用技巧和注意事项,需要的朋友参考一下 概述 1.xml 指可扩展标记语言(EXtensible Markup Language) 2.xml 是一种标记语言,类似html 3.xml 的设计宗旨是传输数据,而非显示数据 4.xml 标签没有被预定义。需要自行定义标签 XML与HTML区别 1.xml 不是 h
我已经阅读了JavaParser手册,并开始构建自己的示例。我想要实现的是阅读Java代码并在其上插入新的代码行。具体来说,我想在每个和语句之前初始化一个计数器,并在语句体内部对计数器进行递增。我这样做的目的是为一组指定的运行运行运行新代码,并观察每个分支执行了多少次。我使用JavaParser来解析和添加代码,因为我想自动生成和运行所有东西。 例如,我们有以下简单的代码: 在解析之后,我想有如下
本文向大家介绍NodeJs之word文件生成与解析的实现代码,包括了NodeJs之word文件生成与解析的实现代码的使用技巧和注意事项,需要的朋友参考一下 一,介绍与需求 1.1,介绍 1, officegen 模块可以为Microsoft Office 2007及更高版本生成Office Open XML文件。此模块不依赖于任何框架,您不需要安装Microsoft Office,因此您可以将它
我正在进入一个比赛的分钟,但在第一天的编码,我得到的错误,你可以看到的问题,以及我的项目不能建立 如果你需要更多的截图只管问。