使用OpenXML将Excel列宽设置为C#中的AutoFit列宽

时间:2017-10-20 14:13:45

标签: c# asp.net openxml-sdk

我有一个Windows窗体应用程序从SQL查询创建Excel,我也可以创建Excel文件。但问题是格式化excel文件。在将数据写入excel文件时,任何人都可以帮助将Excel列格式化为自动调整列宽吗?下面是代码,请帮助我使用此代码使其适用于属性AutoFit Column Width。

private static void WriteExcelFile(DataSet ds, SpreadsheetDocument spreadsheet)
    {
        //  Create the Excel file contents.  This function is used when creating an Excel file either writing 
        //  to a file, or writing to a MemoryStream.
        spreadsheet.AddWorkbookPart();
        spreadsheet.WorkbookPart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook();

        //  My thanks to James Miera for the following line of code (which prevents crashes in Excel 2010)
        spreadsheet.WorkbookPart.Workbook.Append(new BookViews(new WorkbookView()));

        //  If we don't add a "WorkbookStylesPart", OLEDB will refuse to connect to this .xlsx file !
        WorkbookStylesPart workbookStylesPart = spreadsheet.WorkbookPart.AddNewPart<WorkbookStylesPart>("rIdStyles");
        Stylesheet stylesheet = new Stylesheet();
        workbookStylesPart.Stylesheet = stylesheet;


        //  Loop through each of the DataTables in our DataSet, and create a new Excel Worksheet for each.
        uint worksheetNumber = 1;
        Sheets sheets = spreadsheet.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());
        foreach (DataTable dt in ds.Tables)
        {
            //  For each worksheet you want to create
            string worksheetName = dt.TableName;

            //  Create worksheet part, and add it to the sheets collection in workbook
            WorksheetPart newWorksheetPart = spreadsheet.WorkbookPart.AddNewPart<WorksheetPart>();
            Sheet sheet = new Sheet() { Id = spreadsheet.WorkbookPart.GetIdOfPart(newWorksheetPart), SheetId = worksheetNumber, Name = worksheetName };

            // If you want to define the Column Widths for a Worksheet, you need to do this *before* appending the SheetData

            sheets.Append(sheet);

            //  Append this worksheet's data to our Workbook, using OpenXmlWriter, to prevent memory problems
            WriteDataTableToExcelWorksheet(dt, newWorksheetPart);

            worksheetNumber++;
        }

        spreadsheet.WorkbookPart.Workbook.Save();
    }

0 个答案:

没有答案