c# Excel转换成DataSet

/// <summary>

/// Excel转换成DataSet(.xlsx/.xls)

/// </summary>

/// <param name="filePath">Excel文件路径</param>

/// <param name="strMsg"></param>

/// <returns></returns>

public static DataSet ExcelToDataSet(string filePath, out string strMsg)

{

strMsg = "";

DataSet ds = new DataSet();

DataTable dt = new DataTable();

string fileType = Path.GetExtension(filePath).ToLower();

string fileName = Path.GetFileName(filePath).ToLower();

try

{

ISheet sheet = null;

int sheetNumber = 0;

// 加载Excel文件

using (FileStream fs = File.Open(filePath, FileMode.Open, FileAccess.Read))

{

if (fileType == ".xlsx")

{

// 2007版本

XSSFWorkbook workbook = new XSSFWorkbook(fs);

sheetNumber = workbook.NumberOfSheets;

for (int i = 0; i < sheetNumber; i++)

{

string sheetName = workbook.GetSheetName(i);

sheet = workbook.GetSheet(sheetName);

if (sheet != null)

{

dt = GetSheetDataTable(sheet, out strMsg);

if (dt != null)

{

dt.TableName = sheetName.Trim();

ds.Tables.Add(dt);

}

else

{

//MessageBox.Show("Sheet数据获取失败,原因:" + strMsg);

}

}

}

}

else if (fileType == ".xls")

{

// 2003版本

HSSFWorkbook workbook = new HSSFWorkbook(fs);

sheetNumber = workbook.NumberOfSheets;

for (int i = 0; i < sheetNumber; i++)

{

string sheetName = workbook.GetSheetName(i);

sheet = workbook.GetSheet(sheetName);

if (sheet != null)

{

dt = GetSheetDataTable(sheet, out strMsg);

if (dt != null)

{

dt.TableName = sheetName.Trim();

ds.Tables.Add(dt);

}

else

{

//MessageBox.Show("Sheet数据获取失败,原因:" + strMsg);

}

}

}

}

}

return ds;

}

catch (Exception ex)

{

strMsg = ex.Message;

return null;

}

}

相关推荐
架构师沉默1 小时前
设计多租户 SaaS 系统,如何做到数据隔离 & 资源配额?
java·后端·架构
Java中文社群2 小时前
重要:Java25正式发布(长期支持版)!
java·后端·面试
每天进步一点_JL3 小时前
JVM 类加载:双亲委派机制
java·后端
用户298698530144 小时前
Java HTML 转 Word 完整指南
java·后端
渣哥4 小时前
原来公平锁和非公平锁差别这么大
java
mudtools4 小时前
.NET驾驭Word之力:理解Word对象模型核心 (Application, Document, Range)
c#·.net
渣哥4 小时前
99% 的人没搞懂:Semaphore 到底是干啥的?
java
J2K4 小时前
JDK都25了,你还没用过ZGC?那真得补补课了
java·jvm·后端
kfyty7254 小时前
不依赖第三方,不销毁重建,loveqq 框架如何原生实现动态线程池?
java·架构
isysc16 小时前
面了一个校招生,竟然说我是老古董
java·后端·面试