Tag: openxml

如何在Excel范围设置用户级权限,例如“允许用户编辑范围”和openpyxl?

使用openpyxl和Python 3.6,我试图设置用户级别的权限在工作表中的某些范围 ,这将允许用户编辑它(只在我的情况下sorting/筛选)即使表单被locking。 此屏幕截图显示了如何在Excel 2016中手动执行此操作,通过查看 – >允许用户编辑范围 : 我看着名称范围 / 定义名称 ,但无济于事。 这里是worksheet和protection来源链接。 任何帮助将不胜感激!

在Open XML SDK 2.7中将Open XML转换为SpreadsheetML C#

我有一个Excel工作簿,在Sheet 1中有一个小表格,如下所示: 如果我通过7zip或其他东西打开原始XML,则工作表数据的Open XML输出如下所示: <sheetData> <row r="1" spans="1:5" x14ac:dyDescent="0.3"> <cr="A1" t="s"> <v>0</v> </c> <cr="B1" t="s"> <v>1</v> </c> <cr="C1" t="s"> <v>2</v> </c> <cr="D1" t="s"> <v>3</v> </c> <cr="E1" t="s"> <v>4</v> </c> </row> 现在,放下一点叉子。 我知道除了涉及格式和布局的工作表数据外,还有其他几个相关的文件。 我一直在使用Open XML SDK Today,可以访问个人可读的单元格值等。 我想要做的是find一个“简单”的方法来将OpenXML工作表数据转换为类似于如果将文件另存为2003电子表格XML所得到的内容,如下所示: <Worksheet ss:Name="Sheet1"> <Table ss:ExpandedColumnCount="9" ss:ExpandedRowCount="5" x:FullColumns="1" x:FullRows="1" ss:DefaultRowHeight="14.4"> <Column ss:Width="44.400000000000006"/> <Column ss:Width="55.800000000000004"/> <Column ss:Width="80.400000000000006"/> <Column ss:Width="58.2" ss:Span="5"/> <Row> […]

从stream中打开电子表格文档(Open XML SDK)

我遵循以下关于如何使用OpenXML SDK的文章: https : //msdn.microsoft.com/en-us/library/office/ff478410.aspx 我有以下代码: // Open a SpreadsheetDocument based on a stream. SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(stream, true); // Add a new worksheet. WorksheetPart newWorksheetPart = spreadsheetDocument.WorkbookPart.AddNewPart<WorksheetPart>(); newWorksheetPart.Worksheet = new Worksheet(new SheetData()); newWorksheetPart.Worksheet.Save(); Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.GetFirstChild<Sheets>(); string relationshipId = spreadsheetDocument.WorkbookPart.GetIdOfPart(newWorksheetPart); // Get a unique ID for the new worksheet. uint sheetId = 1; […]

使用C#可以将剪贴板上的对象粘贴到excel中作为数据和公式?

在WPF应用程序中,我需要生成可以放在剪贴板上并粘贴到excel中的数据。 我需要粘贴一些可以携带数据和公式的东西。 我正在尝试OpenXML …但我不知道这是行之有效的。 我目前正在尝试制作原始的“Spreadsheet ML”(这与OpenXML不同)? 无论如何,如果任何人都可以提供给我一些指针…或者更好,C#实际上把这种数据放在剪贴板上,我将不胜感激! 我在这里发布了另一个更具体的问题: 如何将OpenXML放到剪贴板上,以便粘贴到Excel中?

使用OpenXML读取Excel文件的性能

截至目前即时通讯使用oledbreader阅读所有版本的Excel文件。 我提到一个DLL读取Excel 2010文件。 但我不能使用oledbreader阅读一些excel 2010文件。 所以我想用openxml来读取所有的excel文件。 是在这个任何性能问题? 哪个更好?

使用openXML从excel导入时出现exception

我想反序列化从excel文件列出的所有数据。 我正在使用这个代码 class ExcelImport { Workbook workBook; SharedStringTable sharedStrings; IEnumerable<Sheet> workSheets; WorksheetPart custSheet; WorksheetPart orderSheet; string FilePath; ExcelStorage provider; Stiker[] ans; List<Stiker> StikerList; public ExcelImport(string fp) { FilePath = fp; } public List<Stiker> dothejob() { using (SpreadsheetDocument document = SpreadsheetDocument.Open(FilePath, true)) { StikerList= new List<Stiker>(); workBook = document.WorkbookPart.Workbook; workSheets = workBook.Descendants<Sheet>(); sharedStrings = document.WorkbookPart.SharedStringTablePart.SharedStringTable; StikerList […]

Excel文件没有SharedStringTable

我试图从excel文件中列出所有数据的反序列化。 但在这一行时: var sharedStringTablePart = workBookPart.SharedStringTablePart; if (sharedStringTablePart == null) { // report a problem } sharedStringTablePart reruen null 我用开放的XML sdk2.0生产力工具检查了该文件,我看到该文件没有SharedStringTable 任何想法为什么?

是否有可能使用.Net或OpenXml框架计算Excel列的宽度,而不使用System.Drawing对象Graphics和Bitmap?

我正在开发一个类,它允许用户在运行中使用OpenXML api创buildExcel电子表格,我需要计算列宽,以便自动适应列中最宽的单元格。 我有以下代码来计算每列的宽度(使用从这里和本教程中的公式): private double CalculateColumnWidth(int textLength) { var font = new System.Drawing.Font("Calibri", 11); float digitMaximumWidth = 0; using(var graphics = Graphics.FromImage(new Bitmap(200, 200))) { for(var i = 0; i < 10; ++i) { var digitWidth = graphics.MeasureString(i.ToString(), font).Width; if (digitWidth > digitMaximumWidth) digitMaximumWidth = digitWidth; } } return Math.Truncate((textLength * digitMaximumWidth + 5.0) / […]

OpenXML for Excel – 文档必须只包含一个根元素。 第1行第0列

* 强大的文本 *我想创build和写入excel。 对于模板,我只是从OPENXML Productivity工具中为现有的Excel文件复制代码,然后修改代码,以便在从该代码创build新文件时添加我的数据行。 但是,我似乎有一些问题得到这个正常工作。 我不断得到一个 ccannot打开文件:part / xl / worksheets / sheet2:缺less根元素replace部分:/xl/worksheets/sheet2.xml部分出现XML错误。 一个文档必须包含一个根元素。 第1行第0列 错误,我仍然无法正确debugging。 另外,在原始模板中,我的工作簿中有3张。 我确定删除了其中的两个,所以我可以只创build一个代码,因为我认为OpenXML 2.0生产力工具只会生成当前文档代码放在一起的表单的代码。 但是会发生的是,生成的文件已经包含了全部4张原始表格,但似乎无法将标题放在每个表格上。 希望得到一些提示,去哪里去find这个问题,并解决它。 提前致谢。 public void CreatePackage(string filePath) { using (SpreadsheetDocument package = SpreadsheetDocument.Create(filePath, SpreadsheetDocumentType.Workbook)) { CreateParts(package); } } private void CreateParts(SpreadsheetDocument document) { ExtendedFilePropertiesPart extendedFilePropertiesPart1 = document.AddNewPart<ExtendedFilePropertiesPart>("rId3"); GenerateExtendedFilePropertiesPart1Content(extendedFilePropertiesPart1); WorkbookPart workbookPart1 = document.AddWorkbookPart(); GenerateWorkbookPart1Content(workbookPart1); WorkbookStylesPart workbookStylesPart1 […]

使用OpenXML从表格生成电子表格

目标:生成一个电子表格,其中的工作表命名为每个工作表第一行中列出的表名和列名。 这些实际上将基于从这些表构build的类。 问题:打开电子表格后,它声称发现“无法读取的内容”,并询问是否要恢复。 如果select“是”,则完全恢复电子表格,但用户不应该这样做。 观察:使用SDK我能够看到电子表格的内部工作,我注意到工作表的XML名称是真正的问题。 在最初的下载版本中,他们被命名为Sheet1到Sheet9,但是他们通过Sheet1f进入Sheet1a。 所以基本上用hex数1-f来编号。 在我修复它之后,他们将这些名字改为纯数字。 不知道你是否可以看到图像,看起来像我的工作阻止网站:/ 注:我看了我的代码,我没有看到任何地方我可以专门命名这些内部的XML表,所以我不知道什么代码分享给你,但我张贴代码部分是创build这些表。 构build电子表格的方法: public MemoryStream CreatePartsFromAssembly(MemoryStream spreadsheetStrem, Type typeInAssembly) { using (SpreadsheetDocument document = SpreadsheetDocument.Create(spreadsheetStrem, SpreadsheetDocumentType.Workbook)) { //List<Type> types = null; var types = ExcelTypeHelper.GetTableTypes(typeInAssembly); ExtendedFilePropertiesPart extendedFilePropertiesPart1 = document.AddNewPart<ExtendedFilePropertiesPart>("rId" + (types.Count).ToString()); GenerateExtendedFilePropertiesPart1Content(extendedFilePropertiesPart1, types); WorkbookPart workbookPart1 = document.AddWorkbookPart(); GenerateWorkbookPart1Content(workbookPart1, types); var sharedStringOffsets = new List<int>(); foreach (var type […]