| /******************************************************************************* |
| * You may amend and distribute as you like, but don't remove this header! |
| * |
| * All rights reserved. |
| * |
| * EPPlus is an Open Source project provided under the |
| * GNU General Public License (GPL) as published by the |
| * Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| * |
| * EPPlus provides server-side generation of Excel 2007 spreadsheets. |
| * See http://www.codeplex.com/EPPlus for details. |
| * |
| * |
| * |
| * The GNU General Public License can be viewed at http://www.opensource.org/licenses/gpl-license.php |
| * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html |
| * |
| * The code for this project may be used and redistributed by any means PROVIDING it is |
| * not sold for profit without the author's written consent, and providing that this notice |
| * and the author's name and all copyright notices remain intact. |
| * |
| * All code and executables are provided "as is" with no warranty either express or implied. |
| * The author accepts no liability for any damage or loss of business that this product may cause. |
| * |
| * |
| * Code change notes: |
| * |
| * Author Change Date |
| ******************************************************************************* |
| * Jan Källman Added 28 Oct 2010 |
| *******************************************************************************/ |
| using System; |
| using System.Collections.Generic; |
| using System.Linq; |
| using System.Text; |
| using System.IO; |
| using OfficeOpenXml; |
| using System.Drawing; |
| using OfficeOpenXml.Style; |
| |
| namespace EPPlusSamples |
| { |
| public static class Sample10 |
| { |
| public static void RunSample10(DirectoryInfo outputDir) |
| { |
| //Create a Sample10 directory... |
| if(!Directory.Exists(outputDir.FullName + @"\Sample10")) |
| { |
| outputDir.CreateSubdirectory("Sample10"); |
| } |
| outputDir=new DirectoryInfo(outputDir + @"\Sample10"); |
| |
| //create the three FileInfo objects... |
| FileInfo templateFile = new FileInfo(outputDir.FullName + @"\Template.xlsx"); |
| if (templateFile.Exists) |
| { |
| templateFile.Delete(); |
| templateFile = new FileInfo(outputDir.FullName + @"\Template.xlsx"); |
| } |
| FileInfo answerFile = new FileInfo(outputDir.FullName + @"\Answers.xlsx"); |
| if (answerFile.Exists) |
| { |
| answerFile.Delete(); |
| answerFile = new FileInfo(outputDir.FullName + @"\Answers.xlsx"); |
| } |
| |
| FileInfo JKAnswerFile = new FileInfo(outputDir.FullName + @"\JKAnswers.xlsx"); |
| if (JKAnswerFile.Exists) |
| { |
| JKAnswerFile.Delete(); |
| JKAnswerFile = new FileInfo(outputDir.FullName + @"\JKAnswers.xlsx"); |
| } |
| |
| //Create the template... |
| using ( |
| ExcelPackage package = new ExcelPackage(templateFile)) |
| { |
| //Lock the workbook totally |
| var workbook = package.Workbook; |
| workbook.Protection.LockWindows = true; |
| workbook.Protection.LockStructure = true; |
| workbook.View.SetWindowSize(150, 525, 14500, 6000); |
| workbook.View.ShowHorizontalScrollBar = false; |
| workbook.View.ShowVerticalScrollBar = false; |
| workbook.View.ShowSheetTabs = false; |
| |
| //Set a password for the workbookprotection |
| workbook.Protection.SetPassword("EPPlus"); |
| |
| //Encrypt with no password |
| package.Encryption.IsEncrypted = true; |
| |
| var sheet = package.Workbook.Worksheets.Add("Quiz"); |
| sheet.View.ShowGridLines = false; |
| sheet.View.ShowHeaders = false; |
| using(var range=sheet.Cells["A:XFD"]) |
| { |
| range.Style.Fill.PatternType=ExcelFillStyle.Solid; |
| range.Style.Fill.BackgroundColor.SetColor(Color.LightGray); |
| range.Style.Font.Name = "Broadway"; |
| range.Style.Hidden = true; |
| } |
| |
| sheet.Cells["A1"].Value = "Quiz-Sweden"; |
| sheet.Cells["A1"].Style.Font.Size = 18; |
| |
| sheet.Cells["A3"].Value = "Enter your name:"; |
| |
| sheet.Column(1).Width = 30; |
| sheet.Column(2).Width = 80; |
| sheet.Column(3).Width = 20; |
| |
| sheet.Cells["A7"].Value = "What is the name of the capital of Sweden?"; |
| sheet.Cells["A9"].Value = "At which place did the Swedish team end up in the Soccer Worldcup 1994?"; |
| sheet.Cells["A11"].Value = "What is the first name of the famous Swedish inventor/scientist that founded the Nobel-prize?"; |
| |
| using (var r = sheet.Cells["B3,C7,C9,C11"]) |
| { |
| r.Style.Fill.BackgroundColor.SetColor(Color.WhiteSmoke); |
| r.Style.Border.Top.Style = ExcelBorderStyle.Dotted; |
| r.Style.Border.Top.Color.SetColor(Color.Black); |
| r.Style.Border.Right.Style = ExcelBorderStyle.Dotted; |
| r.Style.Border.Right.Color.SetColor(Color.Black); |
| r.Style.Border.Bottom.Style = ExcelBorderStyle.Dotted; |
| r.Style.Border.Bottom.Color.SetColor(Color.Black); |
| r.Style.Border.Left.Style = ExcelBorderStyle.Dotted; |
| r.Style.Border.Left.Color.SetColor(Color.Black); |
| r.Style.Locked = false; |
| r.Style.Hidden = false; |
| r.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; |
| } |
| sheet.Select("B3"); |
| sheet.Protection.SetPassword("EPPlus"); |
| sheet.Protection.AllowSelectLockedCells = false; |
| |
| //Options question 1 |
| var list1 = sheet.Cells["C7"].DataValidation.AddListDataValidation(); |
| list1.Formula.Values.Add("Bern"); |
| list1.Formula.Values.Add("Stockholm"); |
| list1.Formula.Values.Add("Oslo"); |
| list1.ShowErrorMessage = true; |
| list1.Error = "Please select a value from the list"; |
| |
| var list2 = sheet.Cells["C9"].DataValidation.AddListDataValidation(); |
| list2.Formula.Values.Add("First"); |
| list2.Formula.Values.Add("Second"); |
| list2.Formula.Values.Add("Third"); |
| list2.ShowErrorMessage = true; |
| list2.Error = "Please select a value from the list"; |
| |
| var list3 = sheet.Cells["C11"].DataValidation.AddListDataValidation(); |
| list3.Formula.Values.Add("Carl Gustaf"); |
| list3.Formula.Values.Add("Ingmar"); |
| list3.Formula.Values.Add("Alfred"); |
| list3.ShowErrorMessage = true; |
| list3.Error = "Please select a value from the list"; |
| |
| |
| //Save, and the template is ready for use |
| package.Save(); |
| |
| //Quiz-template is done, now create the answer template and encrypt it... |
| using (var packageAnswers = new ExcelPackage(package.Stream)) //We use the stream from the template here to get a copy of it. |
| { |
| var sheetAnswers = packageAnswers.Workbook.Worksheets[1]; |
| sheetAnswers.Cells["C7"].Value = "Stockholm"; |
| sheetAnswers.Cells["C9"].Value = "Third"; |
| sheetAnswers.Cells["C11"].Value = "Alfred"; |
| |
| packageAnswers.Encryption.Algorithm = EncryptionAlgorithm.AES192; //For the answers we want a little bit stronger encryption |
| packageAnswers.SaveAs(answerFile, "EPPlus"); //Save and set the password to EPPlus. The password can also be set using packageAnswers.Encryption.Password property |
| } |
| |
| //Ok, Since this is qan example we create one user answer... |
| using (var packageAnswers = new ExcelPackage(package.Stream)) |
| { |
| var sheetUser = packageAnswers.Workbook.Worksheets[1]; |
| sheetUser.Cells["B3"].Value = "Jan Källman"; |
| sheetUser.Cells["C7"].Value = "Bern"; |
| sheetUser.Cells["C9"].Value = "Third"; |
| sheetUser.Cells["C11"].Value = "Alfred"; |
| |
| packageAnswers.SaveAs(JKAnswerFile, "JK"); //We use default encryption here (AES128) and Password JK |
| } |
| } |
| |
| |
| //Now lets correct the user form... |
| var packAnswers = new ExcelPackage(answerFile, "EPPlus"); //Supply the password, so the file can be decrypted |
| var packUser = new ExcelPackage(JKAnswerFile, "JK"); //Supply the password, so the file can be decrypted |
| |
| var wsAnswers = packAnswers.Workbook.Worksheets[1]; |
| var wsUser = packUser.Workbook.Worksheets[1]; |
| |
| //Enumerate the three answers |
| foreach (var cell in wsAnswers.Cells["C7,C9,C11"]) |
| { |
| wsUser.Cells[cell.Address].Style.Fill.PatternType = ExcelFillStyle.Solid; |
| if (cell.Value.ToString().Equals(wsUser.Cells[cell.Address].Value.ToString(), StringComparison.InvariantCultureIgnoreCase)) //Correct Answer? |
| { |
| wsUser.Cells[cell.Address].Style.Fill.BackgroundColor.SetColor(Color.Green); |
| } |
| else |
| { |
| wsUser.Cells[cell.Address].Style.Fill.BackgroundColor.SetColor(Color.Red); |
| } |
| } |
| packUser.Save(); |
| } |
| } |
| } |