先要引用NPOI,NuGet上面有
1.建立连接
/// <summary>
/// 连接远程共享文件夹
/// </summary>
/// <param name="path">远程共享文件夹的路径</param>
/// <param name="userName">用户名</param>
/// <param name="passWord">密码</param>
/// <returns></returns>
public bool connectState(string path, string userName, string passWord)
{
bool Flag = false;
Process proc = new Process();
try
{
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
string dosLine = "net use " + path + " " + passWord + " /user:" + userName;
/*
* 1)删除已有的连接,避免出现“一个用户使用...多重连接”的问题。
* 如果提示“列表是空的”,表示当前没有任何关联连接;
* 如果提示“您有如下远程连接... 继续运行会取消连接”,输入“Y”或者“y”
*/
proc.StandardInput.WriteLine("net use * /del /y");
proc.StandardInput.WriteLine(dosLine);
proc.StandardInput.WriteLine("exit");
while (!proc.HasExited)
{
proc.WaitForExit(1000);
}
string errormsg = proc.StandardError.ReadToEnd();
proc.StandardError.Close();
if (string.IsNullOrEmpty(errormsg))
{
Flag = true;
}
else
{
throw new Exception(errormsg);
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
proc.Close();
proc.Dispose();
}
return Flag;
}
2.读取数据到DataSet
/// <summary>
///
/// </summary>
/// <param name="account">连接账号</param>
/// <param name="pwd">密码</param>
/// <param name="startrowindex">开始行</param>
/// <param name="startcolumnindex">开始列</param>
/// <param name="sheetName">Sheet</param>
/// <returns></returns>
public DataSet LoadShareFileToDataSet(string account, string pwd, int startrowindex, int startcolumnindex, string sheetName)
{
bool status = false;
DataSet ds = new DataSet();
IWorkbook workbook = null;
try
{
//连接共享文件夹,可以配置再配置文件里面
status = connectState(@"\\192.168.1.100\Import", account, pwd);
if (status)
{
//共享文件夹的目录
DirectoryInfo theFolder = new DirectoryInfo(@"\\192.168.1.100\Import");
if (theFolder.Exists && theFolder.GetFiles().Count() != 0)
{
foreach (var itemFile in theFolder.GetFiles())
{
FileStream fileStream = new FileStream(itemFile.FullName, FileMode.Open,FileAccess.Read, FileShare.ReadWrite);
DataTable dt = new DataTable();
if (fileStream != null && fileStream.Length != 0)
{
if (itemFile.Name.IndexOf(".xlsx") > 0)//2007之后版本
workbook = new XSSFWorkbook(fileStream);
else if (itemFile.Name.IndexOf(".xls") > 0)//2007之前版本
workbook = new HSSFWorkbook(fileStream);
ISheet sheet = null;
if (!string.IsNullOrEmpty(sheetName))
{
sheet = workbook.GetSheet(sheetName);
}
else
{
sheet = workbook.GetSheetAt(0);
}
int rowCount = sheet.LastRowNum;
int rowStart = sheet.FirstRowNum;
//这里就看具体需求了
var rows0 = sheet.GetRow(0);
//创建DataTable的Column
foreach (var co in rows0.Cells)
{
var b = co.StringCellValue;
var c = co.ToString();
dt.Columns.Add(b, Type.GetType("System.String"));
}
int columnCount = rows0.LastCellNum;
DataRow dr = null;
for (int i = startrowindex; i < rowCount; i++)
{
var row = sheet.GetRow(i + 1);
if (row == null || row.FirstCellNum < 0) continue;
dr = dt.NewRow();
for (int j = startcolumnindex; j < row.Cells.Count; j++)
{
//用GetCell获取单元格没有为null,不会抛异常
var cell = row.GetCell(j);
if (cell != null)
{
//特殊类型
if (cell.CellType == CellType.Numeric)
{
if (DateUtil.IsCellDateFormatted(cell))
{
dr[j] = row.GetCell(j).DateCellValue;
}
else
{
dr[j] = row.GetCell(j).ToString().Trim();
}
}
else
{
dr[j] = row.GetCell(j).ToString().Trim();
}
}
}
dt.Rows.Add(dr);
}
}
ds.Tables.Add(dt);
}
}
}
return ds;
}
catch (Exception ex)
{
throw ex;
}
}