我使用OpenXML SDK在C#中生成了一个.xlsx电子表格,但无法弄清楚如何使单元格样式起作用.我一直在研究Excel生成的文件,并且无法弄清楚它是如何完成的.
现在,我正在创建一个填充,创建一个CellStyleFormat指向填充,创建一个CellFormat指向的索引CellStyleFormat,然后创建一个CellStyle指向CellFormat.
这是我用来生成文档的代码:
Console.WriteLine("Creating document");
using (var spreadsheet = SpreadsheetDocument.Create("output.xlsx", SpreadsheetDocumentType.Workbook))
{
Console.WriteLine("Creating workbook");
spreadsheet.AddWorkbookPart();
spreadsheet.WorkbookPart.Workbook = new Workbook();
Console.WriteLine("Creating worksheet");
var wsPart = spreadsheet.WorkbookPart.AddNewPart<WorksheetPart>();
wsPart.Worksheet = new Worksheet();
var stylesPart = spreadsheet.WorkbookPart.AddNewPart<WorkbookStylesPart>();
stylesPart.Stylesheet = new Stylesheet();
stylesPart.Stylesheet.Fills = new Fills();
// create a solid red fill
var solidRed = new PatternFill() { PatternType = PatternValues.Solid };
solidRed.AppendChild(new BackgroundColor { Rgb = HexBinaryValue.FromString("FF00FF00") });
stylesPart.Stylesheet.Fills.AppendChild(new Fill { PatternFill = …Run Code Online (Sandbox Code Playgroud) 我使用OpenXml SDK 2.0创建了一个Excel文档,现在我必须设置它的样式,但我不能.
我不知道如何绘制背景颜色或更改不同单元格中的字体大小.
我创建单元格的代码是:
private static Cell CreateTextCell(string header, string text, UInt32Value index)
{
Cell c = new Cell();
c.DataType = CellValues.InlineString;
c.CellReference = header + index;
InlineString inlineString = new InlineString();
DocumentFormat.OpenXml.Spreadsheet.Text t = new DocumentFormat.OpenXml.Spreadsheet.Text();
t.Text = text;
inlineString.AppendChild(t);
c.AppendChild(inlineString);
return c;
}
Run Code Online (Sandbox Code Playgroud) 我需要使用Open XML SDK 2.0从Excel 2007工作簿中的单个工作表中读取数据.我花了很多时间来搜索这样做的基本指导,但我只是在创建电子表格方面找到了帮助.
如何使用此SDK迭代工作表中的行,然后迭代每行中的单元格?
任务
从数据导入excel到DataTable
问题
将跳过不包含任何数据的单元格,并将具有该行中数据的下一个单元格用作空列的值.例如
A1是空的A2有一个值Tom,然后在导入数据A1得到的值A2和A2保持空白
为了说清楚,我在下面提供一些屏幕截图
这是excel数据
码
public class ImportExcelOpenXml
{
public static DataTable Fill_dataTable(string fileName)
{
DataTable dt = new DataTable();
using (SpreadsheetDocument spreadSheetDocument = SpreadsheetDocument.Open(fileName, false))
{
WorkbookPart workbookPart = spreadSheetDocument.WorkbookPart;
IEnumerable<Sheet> sheets = spreadSheetDocument.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>();
string relationshipId = sheets.First().Id.Value;
WorksheetPart worksheetPart = (WorksheetPart)spreadSheetDocument.WorkbookPart.GetPartById(relationshipId);
Worksheet workSheet = worksheetPart.Worksheet;
SheetData sheetData = workSheet.GetFirstChild<SheetData>();
IEnumerable<Row> rows = sheetData.Descendants<Row>();
foreach (Cell cell in rows.ElementAt(0))
{
dt.Columns.Add(GetCellValue(spreadSheetDocument, …Run Code Online (Sandbox Code Playgroud) 我试图通过OpenXML SDK Spreadsheet API开始使用Excel文档.但我还没有找到任何关于如何从头创建xlsx文件的好指南甚至示例.仅限如何打开现有文档并进行修改.
我一直在考虑使用一个空的模板文档并复制它然后开始我的处理.但它的感觉是正确的.它可能更容易,但我不习惯使用一种技术我不觉得我至少理解"非常好".
所以我的问题是:有没有人对文章或书籍或任何其他解释API的资源有任何好的提示?
提前致谢./约翰
我想在本地驱动器上创建一个SpreadsheetML文件,可以通过在Windows资源管理器中单击文件在MS Excel或Open Office中打开.
我尝试了到目前为止我可以找到的所有注册到Microsoft Excel的文件扩展名.其中一些(.xls例如)允许打开文件,但在"文件格式与文件扩展名指定的格式不同"警告对话框之后.某些扩展(如.xlsx)会导致Excel在不打开文件的情况下显示格式错误对话框.
维基百科告诉我们应该扩展.xml,但是默认情况下它是由Web浏览器注册的.
这个,这个和这个类似的问题是关于从网络下载文件,并设置适当的内容类型.但我无法更改本地文件的内容类型.
此文章解释了这恼人的扩展硬化机理是如何工作的,以及如何禁用它,但我认为这是错误的强制用户禁用安全功能只允许电子表格文件被打开.
所以没有解决方案,或者我错过了什么?
我们正在尝试使用OOXML生成MS Excel工作簿并使用SSIS填充数据.我们能够生成工作簿和工作表,还能够在标题单元格中创建列和插入数据.我们还可以使用SSIS填充数据.
但Sheet(DocumentFormat.OpenXml.Spreadsheet.Sheet)和所有单元格(DocumentFormat.OpenXml.Spreadsheet.Cell)成为OpenXmlUnknownElement.因此,我们无法使用以下代码读取工作表/单元格:Sheet sheet = workbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == "Sheet1").SingleOrDefault<Sheet>();
如果我们首先使用MS Excel打开并保存,我们可以读取相同的文件.有谁知道如何解决这个问题?
任何人都可以解释OpenXml中的样式索引如何工作?我有业务需求,我需要将背景颜色应用于Excel工作表中的某些单元格.并且某些样式已经应用于其他单元格.所以我需要决定我需要应用哪种样式的索引.
我正在使用OOXML SDK生成XLSX电子表格,我需要摆脱x:名称空间前缀.我怎样才能做到这一点?
using (SpreadsheetDocument doc = SpreadsheetDocument.Open("template.xlsx", true))
{
//Save the shared string table part
if (doc.WorkbookPart.GetPartsOfType().Count() > 0)
{
SharedStringTablePart shareStringPart =
doc.WorkbookPart.GetPartsOfType().First();
shareStringPart.SharedStringTable.Save();
}
//Save the workbook
doc.WorkbookPart.Workbook.Save();
}
这里,原始XLSX文件来自Excel 2007并且没有前缀,但是,在保存操作之后出现前缀.我怎么能避免这种情况?
这两个Office Open XML片段之间有什么区别?
<c r="A2" t="str">
<v>btyler</v>
</c>
Run Code Online (Sandbox Code Playgroud)
和
<c r="B2">
<is><t>btyler</t></is>
</c>
Run Code Online (Sandbox Code Playgroud)
注意:我根据规范手动创建的第二个示例,第一个是来自实际的Excel工作簿.
双方似乎都有效,并根据规范几乎是相同的,所以我不知道为什么会有t="str"时<is>似乎做同样的事情.Excel何时选择使用其中一个?
spreadsheetml ×10
openxml ×8
excel ×6
openxml-sdk ×6
c# ×4
datatable ×1
excel-2007 ×1
namespaces ×1
sdk ×1
ssis ×1
windows ×1
xlsx ×1