/// <summary> /// 打开Excel编辑 /// </summary> /// <returns></returns> public string OpenExcel() { //在打开Excel前,先要把正在运行的Excel进程给杀掉 //killExcelProcess(); string filePath = generateTempXlsFilePath(); formatDataSourceToExcel(_ConvertedDataSource.Tables[0]); List <T> dataSource = new List <T>(); MB.Util.MyConvert.ConvertDataSetToEntity <T>(_ConvertedDataSource, dataSource, null); hashDataSource(dataSource); if (_EditColumns != null && _EditColumns.Count > 0) { convertLookUpEditValueToText(_ConvertedDataSource.Tables[0]); } sortByColumnSetting(_ConvertedDataSource.Tables[0]); ExcelEditHelper excelEditHelper = new ExcelEditHelper(filePath); excelEditHelper.LoadDataAsExcel(_MainKeys, _ConvertedDataSource.Tables[0]); _ExcelFilePath = filePath; return(filePath); }
/// <summary> /// 得到要提交的excel数据的哈希 /// 对于新的数据,直接放在新的集合对象中 /// 其他数据,放在hash表中与编辑前的数据做对比 /// </summary> private void getSubmittedDataFromExcel() { DataSet dsData = MB.WinBase.LayoutXmlConfigHelper.Instance.CreateNULLDataByFieldPropertys(_Columns); if (dsData.Tables != null && dsData.Tables.Count > 0) { //如果数据源结构中没有主键,则把主键添加进去 int keyColumnIndex = 0; foreach (string mainKeyColumn in _MainKeys) { if (!dsData.Tables[0].Columns.Contains(mainKeyColumn)) { var colInfo = _Columns[mainKeyColumn]; DataColumn newCol = new DataColumn(mainKeyColumn, MB.Util.General.CreateSystemType(colInfo.DataType, false)); newCol.Caption = colInfo.Description; dsData.Tables[0].Columns.Add(newCol); dsData.Tables[0].Columns[COL_DEFAULT_KEY].SetOrdinal(keyColumnIndex++); } } } ExcelEditHelper excelEditHelper = new ExcelEditHelper(_ExcelFilePath); excelEditHelper.DataProgress += new WinEIDrive.Import.ImportProgressEventHandler(xlsImport_DataProgress); excelEditHelper.CommitExcel(dsData); //MB.WinEIDrive.Import.XlsImport xlsImport = new MB.WinEIDrive.Import.XlsImport(dsData, _ExcelFilePath); //xlsImport.DataProgress += new WinEIDrive.Import.ImportProgressEventHandler(xlsImport_DataProgress); //xlsImport.Commit(); MB.Util.DataValidated.Instance.RemoveNULLRowData(dsData); //移除空行数据 bool hasData = dsData != null && dsData.Tables.Count > 0 && dsData.Tables[0].Rows.Count > 0; if (hasData) { if (_EditColumns != null && _EditColumns.Count > 0) { Dictionary <string, List <object> > clickButtonInputColsWithTexts = generateClickButtonWithTextDic(dsData); Dictionary <string, Dictionary <object, DataRow> > clickButtonInputColsWithValues = covertClickButtonInputTextToValue(clickButtonInputColsWithTexts); fillClickInputButtonValueBackTo(dsData, clickButtonInputColsWithValues); } //对数据源进行分类,对有主键的记录进行哈希 List <T> sumitted = new List <T>(); MB.Util.MyConvert.ConvertDataSetToEntity <T>(dsData, sumitted, null); foreach (T obj in sumitted) { string mainKeyValue = generateKeyValueString(obj); if (string.IsNullOrEmpty(mainKeyValue) || !_Values.Keys.Contains(mainKeyValue)) { _SubmittedNewValue.Add(obj); } else { if (!_SubmittedValue.ContainsKey(mainKeyValue)) { _SubmittedValue.Add(mainKeyValue, obj); } else { _SubmittedValue[mainKeyValue] = obj; } string value = computeHash(obj); if (!_SubmittedHashedValues.ContainsKey(mainKeyValue)) { _SubmittedHashedValues.Add(mainKeyValue, value); } else { _SubmittedHashedValues[mainKeyValue] = value; } } } } }
static void Main(string[] args) { ExcelEditHelper ee = new ExcelEditHelper(); ee.Create(); }