using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System; using System.Collections.Generic; using System.Data; using System.Globalization; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace MainForm.ClassFile { public class NPOIOperate { private static Mutex mutex = new Mutex(); /// /// 向已存在的excel写入数据 /// /// excel路径 /// 列索引<列索引,单元格值> /// 列索引<列索引,单元格值> public static string AddExcelData(string fileName, IDictionary headData, IDictionary cellData) { mutex.WaitOne(); string ret = string.Empty; FileStream fileRead = null; FileStream fileWrite = null; try { if (!File.Exists(fileName)) CreateExcel(fileName, headData); IWorkbook workbook = null; //读 fileRead = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); workbook = new HSSFWorkbook(fileRead); ISheet sheet = workbook.GetSheetAt(0); IRow row = sheet.CreateRow(sheet.LastRowNum + 1); ICell cell = null; foreach (KeyValuePair keyValue in cellData) { cell = row.CreateCell(keyValue.Key); cell.SetCellValue(keyValue.Value); } //写 fileWrite = new FileStream(fileName, FileMode.Open, FileAccess.Write, FileShare.ReadWrite); workbook.Write(fileWrite); workbook.Close(); ret = "写入成功"; } catch(Exception ex) { ret = ex.Message.ToString(); } finally { fileRead?.Close(); fileWrite?.Close(); } mutex.ReleaseMutex(); return ret; } /// /// 创建excel写入头 /// /// /// public static void CreateExcel(string fileName, IDictionary headData) { using (FileStream fileWrite = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read)) { IWorkbook workbook = new HSSFWorkbook(); ISheet sheet = workbook.CreateSheet("加工数据");//获取工作表 IRow row = sheet.CreateRow(0); //创建新行 ICell cell = null; foreach (KeyValuePair keyValue in headData) { cell = row.CreateCell(keyValue.Key); cell.SetCellValue(keyValue.Value); } workbook.Write(fileWrite); workbook.Close(); } } } }