Мне нужно добавить столбцы с определенной шириной на лист при создании нового файла Excel. Везде, где я смотрел, это должно быть сделано до Sheetdata (одна ссылка здесь) . Однако я пробовал множество вещей, но не могу заставить его работать. Мой код для создания файла Excel с официального сайта (ссылка здесь - он предназначен для ASP.NET, но отлично работает для меня) .
Вот мой код и последняя попытка заставить его работать:
public void Export_Datagridview(DataGridView dgv, string filename)
{
using (var workbook = SpreadsheetDocument.Create(filename, SpreadsheetDocumentType.Workbook))
{
var workbookPart = workbook.AddWorkbookPart();
workbook.WorkbookPart.Workbook = new Workbook();
workbook.WorkbookPart.Workbook.Sheets = new Sheets();
var sheetPart = workbook.WorkbookPart.AddNewPart<WorksheetPart>();
var sheetData = new SheetData();
//this part is giving me "object reference" error
sheetPart.Worksheet.InsertBefore(AutoFit_Columns(dgv, sheetPart.Worksheet), sheetData);
...//and so on...
И код для добавления столбцов:
private Columns AutoFit_Columns(DataGridView dgv, Worksheet worksheet)
{
Columns cols = new Columns();
for (int col = 0; col < dgv.ColumnCount; colc++)
{
double max_width = 14.5; //something like default width in Excel
for (int row = 0; row < dgv.RowCount; row++)
{
double cell_width = Text_width(dgv.Rows[row].Cells[col].Value.ToString(), new System.Drawing.Font("Arial", 12.0F));
if (cell_width > max_width)
{
max_width = cell_width;
}
if (row == dgv.RowCount - 1) //last iteration - here we allready have max width within column
{
Column c = new Column() { Min = Convert.ToUInt32(col), Max = Convert.ToUInt32(col), Width = max_width, CustomWidth = true };
cols.Append(c);
worksheet.Append(cols);
}
}
}
return cols;
}
Как вы видите, это моя попытка автоматически установить столбцы на основе данных, которые экспортируются из Datagridview. Но прежде чем я смогу протестировать другой код, мне нужно правильно добавить столбцы. Любая помощь приветствуется!