You're mixing UI and back-end code. There is no reason for the code to be in `button1_Click`; it should be in a class of its own, expose a method that receives the values of `textBox1.Text` and `textBox2.Text` as a parameter, and report back the elapsed time. ---------- Why define `DateTime dt = DateTime.Now;` when you don't use it? ---------- Don't call `File.ReadLines(fileName)` twice. Do it once, store the result in a variable and use that variable. ---------- `EmptyRow` should be camelCase. Also, this kind of initialization isn't typical for C#: `int row = 1, EmptyRow = 0;`. ---------- Your entire method is 100 lines long and contains two `foreach` blocks. Split this up into smaller methods; `worksheet` can be a variable at the class level so you don't need to pass it around. ---------- Seeing that this functionality is repeated several times, consider making it into a method with the necessary parameters: (worksheet.Cells[EmptyRow, 6] as Microsoft.Office.Interop.Excel.Range).Value2 =