protected bool InviaMail(DefinedNames definedNames, object siglaEntita) { string fileNameFull = ""; string fileName = ""; try { fileName = @"PrevisioneGAS_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls"; fileNameFull = Environment.ExpandEnvironmentVariables(@"%TEMP%\" + fileName); Excel.Workbook wb = Globals.ThisWorkbook.Application.Workbooks.Add(); Workbook.Main.Range[Range.GetRange(definedNames.GetFirstRow(), definedNames.GetFirstCol(), definedNames.GetRowOffset(), definedNames.GetColOffsetRiepilogo()).ToString()].Copy(); wb.Sheets[1].Range["B2"].PasteSpecial(); wb.Sheets[1].UsedRange.ColumnWidth = 17; wb.Sheets[1].Range["A1"].Select(); wb.SaveAs(fileNameFull, Excel.XlFileFormat.xlExcel8); wb.Close(); Marshal.ReleaseComObject(wb); var config = Workbook.GetUsrConfigElement("destMailTest"); string mailTo = config.Test; string mailCC = ""; DataView entitaProprieta = new DataView(Workbook.Repository[DataBase.TAB.ENTITA_PROPRIETA]); if (Workbook.Ambiente == Simboli.PROD) { entitaProprieta.RowFilter = "SiglaEntita = '" + siglaEntita + "' AND SiglaProprieta = 'PREV_CONSUMO_GAS_MAIL_TO' AND IdApplicazione = " + Workbook.IdApplicazione; if (entitaProprieta.Count > 0) { mailTo = entitaProprieta[0]["Valore"].ToString(); } entitaProprieta.RowFilter = "SiglaEntita = '" + siglaEntita + "' AND SiglaProprieta = 'PREV_CONSUMO_GAS_MAIL_CC' AND IdApplicazione = " + Workbook.IdApplicazione; if (entitaProprieta.Count > 0) { mailCC = entitaProprieta[0]["Valore"].ToString(); } } if (DataBase.OpenConnection()) { Outlook.Application outlook = GetOutlookInstance(); Outlook._MailItem mail = outlook.CreateItem(Outlook.OlItemType.olMailItem); config = Workbook.GetUsrConfigElement("oggettoMail"); string oggetto = config.Value.Replace("%DATA%", DateTime.Now.ToString("dd-MM-yyyy")).Replace("%ORA%", DateTime.Now.ToString("HH:mm")); config = Workbook.GetUsrConfigElement("messaggioMail"); string messaggio = config.Value.Replace("%NOMEUTENTE%", Workbook.NomeUtente); messaggio = Regex.Replace(messaggio, @"^[^\S\r\n]+", "", RegexOptions.Multiline); ////TODO check se manda sempre con lo stesso account... Outlook.Account senderAccount = outlook.Session.Accounts[1]; foreach (Outlook.Account account in outlook.Session.Accounts) { if (account.DisplayName == "Bidding") { senderAccount = account; } } mail.SendUsingAccount = senderAccount; mail.Subject = oggetto; mail.Body = messaggio; foreach (string dest in mailTo.Split(';')) { if (dest.Trim() != "") { mail.Recipients.Add(dest.Trim()); } } mail.CC = mailCC; mail.Attachments.Add(fileNameFull); mail.Send(); File.Delete(fileNameFull); } else { string emailFolder = @"C:\Emergenza\Email\" + Simboli.NomeApplicazione; if (!Directory.Exists(emailFolder)) { Directory.CreateDirectory(emailFolder); } File.Move(fileNameFull, Path.Combine(emailFolder, fileName)); } } catch (Exception e) { Workbook.InsertLog(Core.DataBase.TipologiaLOG.LogErrore, "PrevisioneGAS.Esporta.InvioMail: " + e.Message); System.Windows.Forms.MessageBox.Show(e.Message, Simboli.NomeApplicazione + " - ERRORE!!", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); if (File.Exists(fileName)) { File.Delete(fileName); } return(false); } return(true); }
/// <summary> /// Formatta il range che conterrà tutti i dati del riepilogo. Le celle sono tutte disabilitate e verranno abilitate nella funzione AbilitaAzioni. /// </summary> protected void FormattaAllDati() { Range rngAll = new Range(_definedNames.GetFirstRow(), _definedNames.GetFirstCol() + 1, _definedNames.GetRowOffset(), _definedNames.GetColOffsetRiepilogo() - 1); Range rngData = new Range(_definedNames.GetFirstRow() + 3, _definedNames.GetFirstCol(), _definedNames.GetRowOffset() - 3, _definedNames.GetColOffsetRiepilogo()); _ws.Range[rngData.ToString()].Style = "Area dati riepilogo"; _ws.Range[rngData.Columns[0].ToString()].Style = "Lista entita riepilogo"; _ws.Range[rngData.Columns[0].ToString()].BorderAround2(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlMedium); Excel.Range xlrng = _ws.Range[rngAll.Rows[1, rngAll.Rows.Count - 1].ToString()]; //trovo tutte le aree unite e creo il blocco col bordo grosso int i = 0; int colspan = 0; while (i < xlrng.Columns.Count) { colspan = xlrng.Cells[1, i + 1].MergeArea().Columns.Count; _ws.Range[rngAll.Columns[i, i + colspan - 1].ToString()].BorderAround2(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlMedium); _ws.Range[rngAll.Columns[i, i + colspan - 1].ToString()].Borders[Excel.XlBordersIndex.xlInsideVertical].Weight = Excel.XlBorderWeight.xlThin; i += colspan; } _ws.Range[rngAll.ToString()].EntireColumn.AutoFit(); if (rngAll.ColOffset > 1) { //calcolo la massima dimensione delle colonne e la riapplico a tutto il riepilogo double maxWidth = double.MinValue; foreach (Range col in rngAll.Columns) { maxWidth = Math.Max(_ws.Range[col.ToString()].ColumnWidth, maxWidth); } foreach (Range col in rngAll.Columns) { _ws.Range[col.ToString()].ColumnWidth = maxWidth + 1; } } }