没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
第一章 OpenXML 操作 excel 创建和删除工作表
一、创建工作表
在 Open XML SDK 中,SpreadsheetDocument 类表示 Excel 文档包。若要
打开并使用 Excel 文档,要基于文档创建 SpreadsheetDocument 类的一个实例。
调用 Open 方法之一。本示例代码使用带有需要两个参数的签名的 Open(String,
Boolean) 方法。第一个参数采用表示要打开的文档的完整路径字符串。第二个
参数是 true 或 false,如果此参数为 true,表示是否要打开文件以进行编辑。如
果此参数为 false,则不会保存对该文档所做的任何更改。
下面的 using 语句中显示了调用 Open 方法的代码。
// Open the document for editing.
using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docName, true))
{
// Insert other code here.
}
using 语句提供典型 .Open, .Save, .Close 序列的建议备选序列。它确保在遇
到右大括号时会自动调用 Dispose 方法(Open XML SDK 用来清理资源的内部
方法)。using 语句后面的块为 using 语句中创建或指定的对象设定范围,在此
示例中这个范围就是 spreadsheet。
SpreadsheetML 文档的基本文档结构由引用 Workbook 中的工作表 Sheets 和
Sheet 元素组成。将为每个 Worksheet 创建单独的 XML 文件。
以 SpreadsheetDocument 文档包形式打开文档进行编辑后,代码会使用
AddNewPart 方法向 WorkbookPart 对象中添加一个新 WorksheetPart 对象。然后,
它向 WorksheetPart 对象中添加一个新 Worksheet 对象。
以下是使用 C# 和 Visual Basic 编写的完整示例代码。
// Given a document name, inserts a new worksheet.
publicstaticvoid InsertWorksheet(string docName)
{
// Open the document for editing.
using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docName, true))
{
// Add a blank WorksheetPart.
WorksheetPart newWorksheetPart=spreadSheet.WorkbookPart.AddNewPart<WorksheetPart>();
newWorksheetPart.Worksheet = newWorksheet(new SheetData());
Sheets sheets = spreadSheet.WorkbookPart.Workbook.GetFirstChild<Sheets>();
string relationshipId = spreadSheet.WorkbookPart.GetIdOfPart(newWorksheetPart);
// Get a unique ID for the new worksheet.
uint sheetId = 1;
if (sheets.Elements<Sheet>().Count() > 0)
{
sheetId = sheets.Elements<Sheet>().Select(s => s.SheetId.Value).Max() + 1;
}
// Give the new worksheet a name.
string sheetName = "Sheet" + sheetId;
// Append the new worksheet and associate it with the workbook.
Sheet sheet = newSheet() { Id = relationshipId, SheetId = sheetId, Name = sheetName };
sheets.Append(sheet);
}
}
二、删除工作表
public static bool XLDeleteSheet(string fileName, string sheetToDelete)
{
bool returnValue = false;
using (SpreadsheetDocument xlDoc = SpreadsheetDocument.Open(fileName, true))
{
XmlDocument doc = new XmlDocument();
doc.Load(xlDoc.WorkbookPart.GetStream());
XmlNamespaceManager nsManager = new XmlNamespaceManager(doc.NameTable);
nsManager.AddNamespace("d", doc.DocumentElement.NamespaceURI);
string searchString = string.Format("//d:sheet[@name='{0}']", sheetToDelete);
XmlNode node = doc.SelectSingleNode(searchString, nsManager);
if (node != null)
{
XmlAttribute relationAttribute = node.Attributes["r:id"];
if (relationAttribute != null)
{
string relId = relationAttribute.Value;
xlDoc.WorkbookPart.DeletePart(relId);
node.ParentNode.RemoveChild(node);
doc.Save(xlDoc.WorkbookPart.GetStream(FileMode.Create));
returnValue = true;
}
}
}
return returnValue;
}
在此程序中传递两个参数:工作薄的完整路径和要删除的工作表的名称。
然后使用 SpreadsheetDocument 对象的 Open 方法,以 Open XML 包的形式打
开输入文件。接着,将工作薄中的内容载入 XML DOM 文档。接着,使用
XmlNamespaceManager 对象并通过 d 限制符设置对默认 SpreadsheetML 命名
空间的引用,来设置命名空间管理器。然后使用 //d:sheet 节点的名称属性搜索
指定工作表的文档。对于所有匹配的节点(如果存在),检索关系 Id 并删除与
该 Id 对应的工作表。最后,将更新的 SpreadsheetML 标识保存回主工作薄部件。
第二章 利用 OpenXML 向 Excel 单元格插入内容
编译本主题中的代码需要以下程序集指令:
using System.Linq;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
获取 SpreadsheetDocument 对象
在 Open XML SDK 中,SpreadsheetDocument 类表示 Excel 文档包。若要打开并
使用 Excel 文档,请基于文档创建 SpreadsheetDocument 类的一个实例。基于文
档创建实例后,即可获取对包含工作表的主工作簿部件的访问权限。在此包中,
使用 SpreadsheetML 标记将文档中的文本表示为 XML 形式。
若要从文档中创建类实例,请调用 Open 重载方法之一。提供了多个方法,每
个方法都有不同的签名。本主题中的示例代码使用带有需要两个参数的签名的
Open(String, Boolean) 方法。第一个参数采用表示要打开的文档的完整路径字符
串。第二个参数是 true 或 false,表示是否要打开文件以进行编辑。如果此参数
为 false,则不会保存对该文档所做的任何更改。
下面的 using 语句中显示了调用 Open 方法的代码。
// Open the document for editing.
using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docName, true))
{
// Insert other code here.
}
using 语句提供典型 .Open, .Save, .Close 序列的建议备选序列。它确保在遇到右
大括号时会自动调用 Dispose 方法(Open XML SDK 用来清理资源的内部方
法)。using 语句后面的块为 using 语句中创建或指定的对象设定范围,在此示
例中这个范围就是 spreadSheet。
SpreadsheetML 文档的基本结构
SpreadsheetML 文档的基本文档结构由引用工作簿中的工作表的 Sheets 和 Sheet
元素组成。将为每个 Worksheet 创建单独的 XML 文件。例如,具有 MySheet1
和 MySheet2 这两张工作表的 Workbook 的 SpreadsheetML 位于 Workbook.xml
文件中,并且显示在以下代码示例中。
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<workbook xmlns=http://schemas.openxmlformats.org/spreadsheetml/2006/main
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
<sheets>
<sheet name="MySheet1" sheetId="1" r:id="rId1" />
<sheet name="MySheet2" sheetId="2" r:id="rId2" />
</sheets>
</workbook>
工作表 XML 文件包含一个或多个块级元素(如 SheetData)。sheetData 表示单
元格表,并且包含一个或多个 Row 元素。一个 row 包含一个或多个 Cell 元素。
每个单元格包含一个表示相应单元格值的 CellValue 元素。例如,工作簿中只在
单元格 A1 中具有值 100 的第一张工作表的 SpreadsheetML 位于 Sheet1.xml 文
件中,并且显示在以下代码示例中。
<?xml version="1.0" encoding="UTF-8" ?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<sheetData>
<row r="1">
<c r="A1">
<v>100</v>
</c>
</row>
</sheetData>
</worksheet>
示例代码的工作方式
打开 SpreadsheetDocument 文档进行编辑后,代码将空的 Worksheet 对象插入到
SpreadsheetDocument 文档包中。然后,将新的 Cell 对象插入到新工作表中并将
指定的文本插入到该单元格中。
// Given a document name and text,
// inserts a new worksheet and writes the text to cell "A1" of the new worksheet.
public static void InsertText(string docName, string text)
{
// Open the document for editing.
Imports (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docName, true))
{
// Get the SharedStringTablePart. If it does not exist, create a new one.
SharedStringTablePart shareStringPart;
if (spreadSheet.WorkbookPart.GetPartsOfType<SharedStringTablePart>().Count() > 0)
{
shareStringPart =
spreadSheet.WorkbookPart.GetPartsOfType<SharedStringTablePart>().First();
}
else
剩余23页未读,继续阅读
资源评论
- zhjaster2012-12-24有帮助,但真正解决一些特殊问题还得熟悉最基础的原理。
shj521wsh
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功