Tag: openxml

Excel OpenXml Workbook类中的xmlelements的具体顺序

我通过OpenXml创buildPowerPoint演示文稿。 演讲的幻灯片充满了embedded式的物体。 通常embeddedExcel文档。 除了准备embedded图像和文档之外,Excel还需要在PowerPoint中打开文档时向用户显示哪些区域的其他信息。 通过将OleSize类添加到工作簿部分,可以将此信息添加到Excel工作簿。 请忽略此代码不会检查是否存在该片段,这肯定会导致问题。 这只是一个简单的例子。 var oleSize = new OleSize() {Reference = "A1:H12"}; var workbook = document.WorkbookPart.Workbook; workbook.Append(oleSize); 当刚刚添加到工作簿类的OpenXmlElements列表的末尾时,Excel将显示一个错误消息对话框,指出该文件已损坏,不可修复。 将此元素直接放在PivotCache OpenXmlElement之后,可以作为解决方法。 现在我经历过,当OpenXmlElement在OleSize之前可用时,Excel也会引发这个消息。 我找不到有关该特定类的OpenXmlElements命令的必要性的任何信息。 任何暗示高度赞赏。

读取非常大的ex​​cel文件

我正在使用这篇文章来读取一个非常大的Excel文件,使用SAX方法。 https://msdn.microsoft.com/en-us/library/office/gg575571.aspx 由于客户端计算机内存不足,无法将值存储在DataTable或内存中。 尝试阅读并立即将商店价值读取到数据库中: // The SAX approach. static void ReadExcelFileSAX(string fileName) { using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(fileName, false)) { WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart; WorksheetPart worksheetPart = workbookPart.WorksheetParts.First(); OpenXmlReader reader = OpenXmlReader.Create(worksheetPart); string text; while (reader.Read()) { if (reader.ElementType == typeof(CellValue)) { text = reader.GetText(); Console.Write(text + " "); } } Console.WriteLine(); Console.ReadKey(); } } […]

问题在Excel中使用OpenXml在C#中创builddate单元格

我有一个要求将数据表导出为ex​​cel文件。我使用DocumentFormat.OpenXml完成了它。 但我不能在导出的Excel中获取date(年 – 月 – 日)filter,因为我的单元格被视为string,而不是Exceldate单元格。 我使用interop.dll得到它,但它是耗时的。 我有超过30000条logging。 任何帮助表示赞赏。 我的代码如下: protected void Page_Load(object sender, EventArgs e) { DataSet ds=new DataSet(); ds.Tables.Add(GetData()); GenerateExcel(ds); } public void GenerateExcel(DataSet data) { var Memstream = new MemoryStream(); using (var workbook = SpreadsheetDocument.Create(Memstream, DocumentFormat.OpenXml.SpreadsheetDocumentType.Workbook)) { var workbookPart = workbook.AddWorkbookPart(); workbook.WorkbookPart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook(); workbook.WorkbookPart.Workbook.Sheets = new DocumentFormat.OpenXml.Spreadsheet.Sheets(); WorkbookStylesPart wbsp = […]

使用C#&OpenXML时,在xlsx文件中写入Excel单元格文本时会被修剪

在写入Excel文件时,单元格中的文本在写入后会被修剪。 例如: 比方说,我试图写: "\r\nThis text starts with a new line "我期望当我打开单元格的xlsx文件开始一个空行,而是我得到这个"This text starts with a new line" 这只发生在开始和结束的空白处,基本上被修剪。 我已经尝试设置像这样的单元格格式,但它似乎不工作: new CellFormat() { ApplyAlignment = true, Alignment = new Alignment { WrapText = new BooleanValue(false) } }

如何使用打开的xml sdk在.xlsx文件的现有行中添加新的单元格?

我有一个.xlsx文件,它已经有一些数据。 我想在I1单元格中input一些数据。 更新:我试过这个: WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart; WorksheetPart worksheetPart = workbookPart.WorksheetParts.First(); SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First(); Row row1 = new Row() { RowIndex = (UInt32Value)1U }; Cell cell = new Cell() { CellReference = "I1" }; CellFormula cellformula = new CellFormula(); cellformula.Text = "IF(A2 = A1,1,0)"; CellValue cellValue = new CellValue(); cellValue.Text = "0"; cell.Append(cellformula); cell.Append(cellValue); […]

使用openxml将背景颜色应用于Excel中的特定单元格

以下是我的代码,在下面的最后一个方法中,我做了所有的操作。 请忽略方法的返回types,我稍后改变它。 public static byte[] CreateExcelDocument<T>(List<T> list, string filename) { DataSet ds = new DataSet(); ds.Tables.Add(ListToDataTable(list)); byte[] byteArray = CreateExcelDocumentAsStream(ds, filename); return byteArray; } public static bool CreateExcelDocumentAsStream(DataSet ds, string filename, System.Web.HttpResponse Response) { try { System.IO.MemoryStream stream = new System.IO.MemoryStream(); using (SpreadsheetDocument document = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook, true)) { WriteExcelFile(ds, document); } stream.Flush(); stream.Position = […]

报表查看器导出后Excel文件出错

我使用asp.net中的报表查看器创build了报表。 但最近我发现,当我下载后试图打开excel(xlsx)文件时,发生了一些错误。 它出现了错误消息“我们发现Reportest(34).xlsx'中的某些内容存在问题,您是否希望我们尽可能地恢复?如果您信任此工作簿的源,请单击是。 当我点击是,它popup另一个消息框被说成被replace部分:/xl/worksheets/sheet1.xml部分与XML错误。 非法的xml字符。 第3行,第28935栏。 我试图压缩它,并已经找出了错误的原因。 我发现这个错误是因为28935行中不可读的字符 如何处理这个错误使用错误。 那是我的excel版本吗? 因为以前它工作正常。 请帮我解决这个问题。 谢谢 最好的问候,乔

使用OpenXML API读取Excel时间值

我有一个有时间栏的Excel表。 它的时间列目前是数据types“时间”(下午6:00:00),但是,我已经尝试了“自定义”数据types(下午6:00)。 我使用openXML库读取这个单元格的值如下: row.XCells[9].GetValue() 我读的价值是0.75。 这是我将数据types更改为数字时看到的值。 我想将其转换为C#后端的时间跨度。 我怎么做? var ts = TimeSpan.Parse(row.XCells[9].GetValue()); 不起作用。

OpenXML sdk 2.5 Excel新专栏问题

我有一部分使用OpenXML生成Excel文档的代码。 问题是设置自定义列的宽度。 这个问题经常在这里讨论,但不幸的是没有任何帮助。 所以这里创build文件的代码: SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(stream , SpreadsheetDocumentType.Workbook); WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart(); workbookpart.Workbook = new Workbook(); WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>(); worksheetPart.Worksheet = new Worksheet(new SheetData()); Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook. AppendChild<Sheets>(new Sheets()); Sheet sheet = new Sheet() { Id = spreadsheetDocument.WorkbookPart. GetIdOfPart(worksheetPart), SheetId = 1, Name = _sheetName }; sheets.Append(sheet); document = spreadsheetDocument; wbPart […]

在没有符号的Open XML中格式化欧洲货币数字格式的代码

我的应用程序是在C#MVC中开发的,我使用Open XML在Excel Sheet中导出网格数据。 网格有各种列,其中包含数量字段。 我在页面上有两个button,一个是北美格式的“NA”,另一个是欧洲格式的“EU”。 这两个button导出Excel表单。 当“NA”被按下时导出excel金额栏值转换为如下并运行良好 , 1000000 ———-> 1,000,000 (Format Code used : #,##0) 但是,当“欧盟”被按下出口时,excel的数值并没有按照预期转换, 而是不起作用 。 1000000 ———-> 1000000.0 (Format Code used : #.##0) 在Open XML中,我将stylesheet.xml文件configuration为 <x:numFmt numFmtId="169" formatCode="[>=1000]#,##0" /> // This works <x:numFmt numFmtId="170" formatCode="[>=1000]#.##0" /> // This doesn't work 有没有人有任何build议来解决这个问题。 我甚至尝试通过自定义格式选项更改欧洲货币的Excel工作表单元格格式,但这也不起作用。 我预期的结果是我无法实现的。 1000000 ———–> 1.000.000