加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 打开XML Excel.创建文件后无法打开“打印”对话框.文件已

发布时间:2020-12-15 22:31:23 所属栏目:百科 来源:网络整理
导读:我希望有人遇到问题,并有一个解决方案. 我能够使用DocumentFormat.OpenXml.dll库成功创建Excel文件. 问题是如果我的代码冻结了前x行,后来当我在Excel中打开文档并尝试使用“打
我希望有人遇到问题,并有一个解决方案.

我能够使用DocumentFormat.OpenXml.dll库成功创建Excel文件.

问题是如果我的代码冻结了前x行,后来当我在Excel中打开文档并尝试使用“打印”对话框时,我得到其中一个“Microsoft Excel已停止工作”对话框.

如果我解冻行,保存文件并重新打开它,打印对话框工作正常.我甚至可以手动冻结行,保存文件并在Excel中打开它;打印对话框工作正常.

我甚至在OpenXML Productivity工具中打开了这两个文件,两者中的代码看起来都是一样的.

所以我正在做的事情肯定有其他问题.

如果它有帮助,这就是完成所有事情的功能.样式表和数据表填充在别处:

public void CreateSpreadsheetWorkbook ( string filepath,List<string []> dataList,List<string> excelHeader )
{
    SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create ( filepath,SpreadsheetDocumentType.Workbook );    // Create a spreadsheet document by supplying the filepath.By default,AutoSave = true,Editable = true,and Type = xlsx.

    WorkbookPart            workbookpart        = spreadsheetDocument.AddWorkbookPart ();                                        // Add a WorkbookPart to the document.
    workbookpart.Workbook = new Workbook ();

    WorksheetPart           worksheetPart       = workbookpart.AddNewPart<WorksheetPart> ();                                     // Add a WorksheetPart to the WorkbookPart.
    //Worksheet               worksheet1          = new Worksheet     ();
    Worksheet               worksheet1          = new Worksheet     () { MCAttributes = new MarkupCompatibilityAttributes () { Ignorable = "x14ac" } };

    SheetData               sheetData1          = new SheetData     ();
    Columns                 columns1            = new Columns       ();


    worksheet1.AddNamespaceDeclaration ( "r","http://schemas.openxmlformats.org/officeDocument/2006/relationships" );
    worksheet1.AddNamespaceDeclaration ( "x","http://schemas.openxmlformats.org/spreadsheetml/2006/main"           );
    worksheet1.AddNamespaceDeclaration ( "x14ac","http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"         );

    //
    // Setup Freeze and SheetDimensions data elements...
    //
    string strFreezeRow = "";
    double numRows      = 0.00;

    if ( xlRegular_Heading != "" )
    {
        numRows      = 4;
        strFreezeRow = "A5";
    }
    else
    {
        numRows      = 1;
        strFreezeRow = "A2";
    }

    int             numSheetRows = numRecordCount + (int)numRows;

    SheetViews              sheetViews1             = new SheetViews            ();
    SheetDimension          sheetDimension1         = new SheetDimension        () { Reference = "A1:" + strHighestColumn + numSheetRows.ToString() };
    SheetFormatProperties   sheetFormatProperties1  = new SheetFormatProperties () { DefaultRowHeight = 11.25D,DyDescent = 0.2D };
    sheetFormatProperties1.AddNamespaceDeclaration ( "x14ac","http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" );

    if ( oPrinterSetup.psFreezeRows )
    {
        SheetView               sheetView1              = new SheetView             () { TabSelected = true,WorkbookViewId = (UInt32Value) 0U };
        Pane                    pane1                   = new Pane                  () { VerticalSplit = numRows,TopLeftCell = strFreezeRow,ActivePane = PaneValues.BottomLeft,State = PaneStateValues.Frozen };
        Selection               selection1              = new Selection             () { Pane = PaneValues.BottomLeft,ActiveCell = strFreezeRow,SequenceOfReferences = new ListValue<StringValue> () { InnerText = strFreezeRow } };

        sheetView1.Append  ( pane1      );
        sheetView1.Append  ( selection1 );
        sheetViews1.Append ( sheetView1 );
    }

    uint x = 0;
    for ( x = 0; x < layoutList.Count; x++ )
    {
        uint numIndex = x + 1;

        Column column1 = new Column () { Min = numIndex,Max = numIndex,Width = layoutList [ (int) x ].numColumnWIDTH,Style = 2,CustomWidth = true };
        columns1.Append ( column1 );
    }

    worksheet1.Append     ( sheetDimension1         );

    if ( oPrinterSetup.psFreezeRows )
        worksheet1.Append ( sheetViews1             );

    worksheet1.Append     ( sheetFormatProperties1  );
    worksheet1.Append     ( columns1                );
    worksheet1.Append     ( sheetData1              );

    if ( xlRegular_Heading != "" )
    {
        MergeCells mergeCells1 = new MergeCells () { Count = (UInt32Value) 2U                   };
        MergeCell  mergeCell1  = new MergeCell  () { Reference = "A1:B1"                        };
        MergeCell  mergeCell2  = new MergeCell  () { Reference = "A2:" + strHighestColumn + "2" };

        mergeCells1.Append ( mergeCell1 );
        mergeCells1.Append ( mergeCell2 );

        worksheet1.Append  ( mergeCells1 );
    }

    worksheet1.Append ( pageMargins );
    worksheet1.Append ( pageSetup   );

    if ( oPrinterSetup.psLeftHeader != "" && oPrinterSetup.psCenterHeader != "" && oPrinterSetup.psRightHeader != "")
        worksheet1.Append ( AddHeader() );

    worksheetPart.Worksheet = worksheet1;

    Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<Sheets> ( new Sheets () );                                       // Add Sheets to the Workbook.           
    Sheet  sheet  = new Sheet () { Id = spreadsheetDocument.WorkbookPart.GetIdOfPart ( worksheetPart ),SheetId = 1,Name = "MySheet" };   // Append a new worksheet and associate it with the workbook.
    sheet.AddNamespaceDeclaration ( "r","http://schemas.openxmlformats.org/officeDocument/2006/relationships" );


    DefinedNames definedNames1 = new DefinedNames ();
    DefinedName  definedName1  = new DefinedName  () { Name = "_xlnm.Print_Titles",LocalSheetId = (UInt32Value) 0U };

    sheets.Append ( sheet );


    SheetData sData = worksheetPart.Worksheet.GetFirstChild<SheetData> ();                      // data for the sheet 

    excelHeaderMethod ( spreadsheetDocument,sData,_headerColumns,excelHeader );   // Export header
    ForeachToExcel    ( spreadsheetDocument,dataList,excelHeader );   // Export data content

    definedName1.Text = "MySheet!" + oPrinterSetup.psPrintTitleRows;
    definedNames1.Append ( definedName1 );

    workbookpart.Workbook.Append ( definedNames1 );

    workbookpart.Workbook.Save ();
    spreadsheetDocument.Close  (); // Close the document.
}

解决方法

我通过向Workbook对象添加一个空的WorkbookView来修复此问题:

workbookpart.Workbook.BookViews = new BookViews(new WorkbookView());

Excel必须需要WorkbookView才能生成打印预览.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读