c# – ‘文件已损坏,无法打开’OpenXML
发布时间:2020-12-15 22:50:39 所属栏目:百科 来源:网络整理
导读:我从Open XML sdk获得了代码而不是SpreadsheetDocument.Create,我使用了SpreadsheetDocument.Open 在添加到文件中的图像之后,此代码正在运行并在.xlsx中添加图像.我打开显示的文件 – The file is corrupt and cannot be opened 如果您想了解更多细节请!让
我从Open
XML sdk获得了代码而不是SpreadsheetDocument.Create,我使用了SpreadsheetDocument.Open
在添加到文件中的图像之后,此代码正在运行并在.xlsx中添加图像.我打开显示的文件 – >
如果您想了解更多细节请!让我知道. 参考网址 – > https://code.msdn.microsoft.com/office/How-to-insert-image-into-93964561 谢谢您的帮助! /// <summary> /// add sheet in xlsx then add image into it. /// </summary> /// <param name="sFile"></param> /// <param name="imageFileName"></param> public void InsertimginExcel(string sFile,string imageFileName) { try { // Create a spreadsheet document by supplying the filepath. using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument. Open(sFile,true)) { // Add a WorkbookPart to the document. //WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart(); //workbookpart.Workbook = new Workbook(); // Add a WorksheetPart to the WorkbookPart. WorksheetPart worksheetPart = spreadsheetDocument.WorkbookPart.AddNewPart<WorksheetPart>(); worksheetPart.Worksheet = new Worksheet(new SheetData()); // Add Sheets to the Workbook. Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook. AppendChild<Sheets>(new Sheets()); // Append a new worksheet and associate it with the workbook. Sheet sheet = new Sheet() { Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart),SheetId = 1,Name = "mySheet" }; sheets.Append(sheet); var drawingsPart = worksheetPart.AddNewPart<DrawingsPart>(); if (!worksheetPart.Worksheet.ChildElements.OfType<DocumentFormat.OpenXml.Spreadsheet.Drawing>().Any()) { worksheetPart.Worksheet.Append(new DocumentFormat.OpenXml.Spreadsheet.Drawing { Id = worksheetPart.GetIdOfPart(drawingsPart) }); } if (drawingsPart.WorksheetDrawing == null) { drawingsPart.WorksheetDrawing = new WorksheetDrawing(); } var worksheetDrawing = drawingsPart.WorksheetDrawing; var imagePart = drawingsPart.AddImagePart(ImagePartType.Jpeg); using (var stream = new FileStream(imageFileName,FileMode.Open)) { imagePart.FeedData(stream); } Bitmap bm = new Bitmap(imageFileName); DocumentFormat.OpenXml.Drawing.Extents extents = new DocumentFormat.OpenXml.Drawing.Extents(); var extentsCx = (long)bm.Width * (long)((float)914400 / bm.HorizontalResolution); var extentsCy = (long)bm.Height * (long)((float)914400 / bm.VerticalResolution); bm.Dispose(); var colOffset = 0; var rowOffset = 0; int colNumber = 5; int rowNumber = 10; var nvps = worksheetDrawing.Descendants<Xdr.NonVisualDrawingProperties>(); var nvpId = nvps.Count() > 0 ? (UInt32Value)worksheetDrawing.Descendants<Xdr.NonVisualDrawingProperties>().Max(p => p.Id.Value) + 1 : 1U; var oneCellAnchor = new Xdr.OneCellAnchor( new Xdr.FromMarker { ColumnId = new Xdr.ColumnId((colNumber - 1).ToString()),RowId = new Xdr.RowId((rowNumber - 1).ToString()),ColumnOffset = new Xdr.ColumnOffset(colOffset.ToString()),RowOffset = new Xdr.RowOffset(rowOffset.ToString()) },new Xdr.Extent { Cx = extentsCx,Cy = extentsCy },new Xdr.Picture( new Xdr.NonVisualPictureProperties( new Xdr.NonVisualDrawingProperties { Id = nvpId,Name = "Picture " + nvpId,Description = imageFileName },new Xdr.NonVisualPictureDrawingProperties(new A.PictureLocks { NoChangeAspect = true }) ),new Xdr.BlipFill( new A.Blip { Embed = drawingsPart.GetIdOfPart(imagePart),CompressionState = A.BlipCompressionValues.Print },new A.Stretch(new A.FillRectangle()) ),new Xdr.ShapeProperties( new A.Transform2D( new A.Offset { X = 0,Y = 0 },new A.Extents { Cx = extentsCx,Cy = extentsCy } ),new A.PresetGeometry { Preset = A.ShapeTypeValues.Rectangle } ) ),new Xdr.ClientData() ); worksheetDrawing.Append(oneCellAnchor); //workbookpart.Workbook.Save(); // Close the document. spreadsheetDocument.Close(); } } catch (Exception ex) { Console.WriteLine(ex.Message); //log.Error("error occur while creating sheet and adding image --> " + ex.Message.ToString()); } } 解决方法
不确定xlsx文件可以处理多少个工作簿部分和工作表部分,以及SheetId是否必须是所有表单的文档唯一.尝试将ID更改为例如5如果没有帮助:不要为工作表创建新的工作簿部分,如果可能的话,使用existig.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |