using System;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using GemBox.Spreadsheet;
namespace ExcelSortingAutomation
{
public class Program
{
[STAThread]
public static void Main(string[] args)
{
SpreadsheetInfo.SetLicense("License");
ExcelFile ef = new ExcelFile();
ExcelWorksheet ws = ef.Worksheets.Add("Error Spreadsheet info Elmah");
int i = 0;
var checkTime = DateTime.Now;
var files = Directory.GetFiles("C:\\ErrorsMay2017", "*.xml");
foreach (string file in files)
{
var tagElement = XElement.Load(file);
var errors = from tagAttribute in tagElement.DescendantsAndSelf("error").OrderBy(x => x.Attribute("type"))
select new
{
errorID = (string)tagAttribute.Attribute("errorId"),
type = (string)tagAttribute.Attribute("type"),
message = (string)tagAttribute.Attribute("message"),
time = (string)tagAttribute.Attribute("time"),
PathInfo = tagAttribute.Elements("serverVariables").Descendants("item").Where(x => x.Attribute("name").Value == "PATH_INFO")
.Select(x => x.Descendants("value").First().Attribute("string").Value).SingleOrDefault(),
HttpHost = tagAttribute.Elements("serverVariables").Descendants("item").Where(x => x.Attribute("name").Value == "HTTP_HOST")
.Select(x => x.Descendants("value").First().Attribute("string").Value).SingleOrDefault()
};
int columnCount = ws.CalculateMaxUsedColumns();
foreach (var error in errors)
{
// generates table head
ws.Cells[0, 0].Value = "errorID";
ws.Cells[0, 1].Value = "type";
ws.Cells[0, 2].Value = "message";
ws.Cells[0, 3].Value = "time";
ws.Cells[0, 4].Value = "Http_Host";
ws.Cells[0, 5].Value = "Path_Info";
if (i < columnCount)
{
ws.Columns[i].AutoFit(1, ws.Rows[1], ws.Rows[ws.Rows.Count - 1]);
}
Console.Write(error);
ws.Cells[i, 0].Value = error.errorID;
ws.Cells[i, 1].Value = error.type;
ws.Cells[i, 2].Value = error.message;
ws.Cells[i, 3].Value = error.time;
ws.Cells[i, 4].Value = error.PathInfo;
ws.Cells[i, 5].Value = error.HttpHost;
i++;
}
ef.Save("C:\\ErrorsMay2017\\errorlog " + checkTime.ToString("MM-dd-yyyy-HH-mm") + ".xls");
}
}
}
}
In the above example, I have a simple console application that parses elmah error logs, separates out a few key components, and then prints them into a series of cells in Gembox.spreadsheet. My current issue is that, with the Autofit setting, I am getting correct styling on Cells 2-5, but not on 0, or 1. When changing the Autofit(1) to AutoFit(0) it printed the first cell correctly, but removed all the others. Can someone please explain, or provide me with insight as to how to print all cells with Auto format?