Как установить ширину ячейки в файле xlsx, созданном программно? - PullRequest
2 голосов
/ 31 января 2012

У меня есть этот код C #, который преобразует набор данных в xlsx.Есть ли способ установить ширину ячейки или столбца листа созданного файла xlsx?

//Get the filename      
String filepath = args[0].ToString();
//Convert the file to dataset
DataSet ds = Convert(filepath.ToString(), "tblCustomers", "\t");

//Create the excell object
Excel.Application excel = new Excel.Application();
//Create the workbook
Excel.Workbook workBook = excel.Workbooks.Add();
//Set the active sheet
Excel.Worksheet sheet = workBook.ActiveSheet;


int i = 0;
foreach (DataRow row in ds.Tables[0].Rows)
{                              
    for (int j = 0; j < row.ItemArray.Length; j++)
    {
        sheet.Cells[i + 1, j + 1] = row[j];
    }

    i++;
}

workBook.SaveAs(@"C:\fromCsv.xlsx");
workBook.Close();

Ответы [ 2 ]

7 голосов
/ 31 января 2012
sheet.Columns["D:D"].ColumnWidth = 17.57;

или

sheet.Columns[1].ColumnWidth = 17.57;

Вы можете записать макросы в Excel, а затем посмотреть на сгенерированный код (объектная модель такая же).

1 голос
/ 15 ноября 2015

Чтобы автоматически установить ширину всех столбцов на «правильный размер» для их содержимого, вы можете позаботиться об этом, вызвав функцию AutoFit, например:

_xlSheet.Columns.AutoFit();

Однако иногда один или два «жулика»значения в столбце делают этот столбец сверхшироким, и вам нужно перетащить столбец влево, чтобы увидеть больше данных.Вы можете преодолеть этот Catch-22, используя как AutoFit, так и затем, указав ширину любых проблемных столбцов.Вот код для того, как это сделать, который предполагает, что столбец 1 - это тот, в который нужно обуздать, а 42 - это ширина, которую вы хотите принять:

private Worksheet _xlSheet;
private static readonly int ITEMDESC_COL = 1;
private static readonly int WIDTH_FOR_ITEM_DESC_COL = 42;
. . .
_xlSheet.Columns.AutoFit();
// Now take back the wider-than-the-ocean column
((Range)_xlSheet.Cells[ITEMDESC_COL, ITEMDESC_COL]).EntireColumn.ColumnWidth =  WIDTH_FOR_ITEM_DESC_COL;

Примечание. В качестве дополнительной тонкости вы можетеиметь слишком длинную перенос содержимого (особенно полезно, если они находятся в объединенном (многострочном) диапазоне) примерно так (где «диапазон» - это диапазон, определенный вами при заполнении столбца):

range.WrapText = true;

Примечание. Для работы этого кода необходимо добавить сборку Microsoft.Offie.Interop.Excel.

...