public ExcelEdit() { // // TODO: 在此处添加构造函数逻辑 // //设置关闭事件 EventDel_BeforeBookClose = new Excel.AppEvents_WorkbookBeforeCloseEventHandler(BeforeBookClose); EventDel_SelectionChange = new Excel.DocEvents_SelectionChangeEventHandler(RangeSelected); EventDel_CellsChange = new Excel.DocEvents_ChangeEventHandler(CellsChange); foreignKey = new Dictionary <string, string>(); }
private void EditInExcel(string resourceType) { if (masterData != null) { Dictionary <string, int> cellDictionary = new Dictionary <string, int>(); Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); app.Visible = false; app.DisplayAlerts = false; try { Workbook workbook = null; workbook = app.Workbooks.Add(XlWBATemplate.xlWBATWorksheet); try { this.Cursor = Cursors.WaitCursor; //Create DataArray //=================================================================================================================================================================================== int numberOfRows = 2; int numberOfCols = -1; foreach (string rt in masterData.Keys) { if (rt == resourceType) { foreach (string moduleName in masterData[rt].Value.Keys) { if (Convert.ToBoolean(masterData[rt].Value[moduleName].Key.Attributes["Translate"].Value)) { foreach (string resourceKey in masterData[rt].Value[moduleName].Value.Keys) { int numOfTransKeys = masterData[rt].Value[moduleName].Value[resourceKey].Value.Where(k => Convert.ToBoolean(k.Value.Key.Attributes["Translate"].Value)).Count(); numberOfRows += numOfTransKeys; //Find number of columns. Only done once if (numberOfCols == -1) { if (numOfTransKeys == masterData[rt].Value[moduleName].Value[resourceKey].Value.Count) { numberOfCols = masterData[rt].Value[moduleName].Value[resourceKey].Value.First().Value.Value.Count; numberOfCols += 5; //Add overhead columns } } } } } } } object[,] data = new object[numberOfRows, numberOfCols]; //=================================================================================================================================================================================== Worksheet sheet = (Worksheet)workbook.Worksheets.get_Item(1); sheet.Activate(); sheet.Application.ActiveWindow.SplitRow = 1; sheet.Application.ActiveWindow.SplitColumn = 6; sheet.Application.ActiveWindow.FreezePanes = true; sheet.Cells[1, 5].EntireColumn.ColumnWidth = 15; sheet.Cells[1, 6].EntireColumn.NumberFormat = "@"; sheet.Cells[1, 6].EntireColumn.WrapText = true; sheet.Cells[1, 6].EntireColumn.ColumnWidth = 40; data[0, 0] = "ResourceType"; data[0, 1] = "Module"; data[0, 2] = "ResourceKey"; data[0, 3] = "Key"; data[0, 4] = "Updated"; data[0, 5] = "text"; //sheet.Cells[1, 1] = "ResourceType"; //sheet.Cells[1, 2] = "Module"; //sheet.Cells[1, 3] = "ResourceKey"; //sheet.Cells[1, 4] = "Key"; //sheet.Cells[1, 5] = "Updated"; //sheet.Cells[1, 6] = "text"; int colIndex = 7; Dictionary <string, int> translationDictionary = new Dictionary <string, int>(); foreach (string cultureName in Localizer.GetSupportedTranslationsCultureNames(resourceType)) { sheet.Cells[1, colIndex].EntireColumn.ColumnWidth = 40; sheet.Cells[1, colIndex].EntireColumn.NumberFormat = "@"; //sheet.Cells[1, colIndex] = cultureName; data[0, colIndex - 1] = cultureName; translationDictionary.Add(cultureName, colIndex - 1); colIndex++; } sheet.Cells.Locked = false; sheet.Range["1:1"].EntireRow.Locked = true; sheet.Range["1:1"].EntireRow.Font.Bold = true; //int insertIndex = Math.Max(sheet.UsedRange.Rows.Count, 1); int insertIndex = 1; foreach (string rt in masterData.Keys) { if (rt == resourceType) { foreach (string moduleName in masterData[rt].Value.Keys) { if (Convert.ToBoolean(masterData[rt].Value[moduleName].Key.Attributes["Translate"].Value)) { foreach (string resourceKey in masterData[rt].Value[moduleName].Value.Keys) { foreach (string key in masterData[rt].Value[moduleName].Value[resourceKey].Value.Keys) { if (Convert.ToBoolean(masterData[rt].Value[moduleName].Value[resourceKey].Value[key].Key.Attributes["Translate"].Value)) { string updated = masterData[rt].Value[moduleName].Value[resourceKey].Value[key].Key.Attributes["Updated"].Value; data[insertIndex, 0] = rt; data[insertIndex, 1] = moduleName; data[insertIndex, 2] = resourceKey; data[insertIndex, 3] = key; data[insertIndex, 4] = updated; //sheet.Cells[insertIndex, 1] = rt; //sheet.Cells[insertIndex, 2] = moduleName; //sheet.Cells[insertIndex, 3] = resourceKey; //sheet.Cells[insertIndex, 4] = key; //sheet.Cells[insertIndex, 5] = updated; foreach (KeyValuePair <string, XmlNode> translation in masterData[rt].Value[moduleName].Value[resourceKey].Value[key].Value) { if (translation.Key == Localizer.GetDefaultCultureName(rt)) { //sheet.Cells[insertIndex, 6] = translation.Value.InnerText; data[insertIndex, 5] = translation.Value.InnerText; } else { //sheet.Cells[insertIndex, translationDictionary[translation.Key]] = translation.Value.InnerText; data[insertIndex, translationDictionary[translation.Key]] = translation.Value.InnerText; } } insertIndex++; } } } } } } } Range startCell = (Range)sheet.Cells[1, 1]; Range endCell = (Range)sheet.Cells[numberOfRows, numberOfCols]; Range writeRange = sheet.Range[startCell, endCell]; writeRange.Value2 = data; //string tmpFileName = "TranslationWorkSheet_" + Guid.NewGuid().ToString() + ".xlsx"; //string tmpFilePath = (Path.Combine(System.Windows.Forms.Application.ExecutablePath, tmpFileName)); //workbook.SaveAs(tmpFilePath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); excelIsClosed = false; Microsoft.Office.Interop.Excel.AppEvents_WorkbookBeforeCloseEventHandler Event_BeforeBookClose; Event_BeforeBookClose = new Microsoft.Office.Interop.Excel.AppEvents_WorkbookBeforeCloseEventHandler(app_WorkbookBeforeClose); app.WorkbookBeforeClose += Event_BeforeBookClose; app.Visible = true; //Wait until excel is closed while (!excelIsClosed) { System.Threading.Thread.Sleep(1000); } if (excelData != null) { UpdateMasterFromExcelData(excelData); } this.Cursor = Cursors.Default; Marshal.FinalReleaseComObject(sheet); sheet = null; } finally { Marshal.FinalReleaseComObject(workbook); workbook = null; } } catch (Exception ex) { } finally { Marshal.FinalReleaseComObject(app); app = null; GC.Collect(); } } }
protected override void OnAfterLoad() { closeWorkbookEvent = WorkbookClosed; }
public CodeExtractor() { InitializeComponent(); localAppPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); IniProfile ini = new IniProfile(string.Format("{0}testIni.ini", localAppPath)); ini.IniWriteValue("Password", "ABC", "123456"); ini.IniWriteValue("Password", "ABCapp@micronium", "B?[L0gTgV"); //ini.Write("cfoapp@soltimum", "BfWLK?[0gTgc"); ListeSourceCodeMenuItem.Enabled = false; ExportSourceCodesMenuItem.Enabled = false; closeSourceMenuItem.Enabled = false; saveCodesSourceMenuItem.Enabled = false; ListDestinationCodeMenuItem.Enabled = false; ExportDestinationCodesMenuItem.Enabled = false; closeDestinationMenuItem.Enabled = false; SaveCodesDestinationMenuItem.Enabled = false; ExcelApp = new Excel.Application() { Visible = false, DisplayAlerts = false, EnableEvents = false }; //xlApp = new Microsoft.Office.Interop.Excel.Application(); ExcelApp.WorkbookOpen += new Excel.AppEvents_WorkbookOpenEventHandler(app_WorkbookOpen); ExcelApp.WorkbookActivate += new Excel.AppEvents_WorkbookActivateEventHandler(app_WorkbookActivate); //Add an event handler for the WorkbookBeforeClose Event of the //Application object. EventDel_BeforeBookClose = new Excel.AppEvents_WorkbookBeforeCloseEventHandler(BeforeBookClose); ExcelApp.WorkbookBeforeClose += EventDel_BeforeBookClose; //Add an event handler for the Change event of both worksheet objects. //EventDel_CellsChange = new Excel.DocEvents_ChangeEventHandler(CellsChange); //xlSheet1.Change += EventDel_CellsChange; //xlSheet2.Change += EventDel_CellsChange; //xlSheet3.Change += EventDel_CellsChange; //Make Excel visible and give the user control. //ExcelApp.Visible = true; ExcelApp.UserControl = true; }