C# 如何使用C访问excel书签#
我有一个很大的excel文件,我们必须导入数据库。导入工作正常,但导入需要35秒。客户等不及了。我已经在里面创建了书签 下面是创建书签的链接。 现在我想读一下C代码中的书签。正如我所说,我们有不同的部分,如: 1.分布C# 如何使用C访问excel书签#,c#,excel,bookmarks,C#,Excel,Bookmarks,我有一个很大的excel文件,我们必须导入数据库。导入工作正常,但导入需要35秒。客户等不及了。我已经在里面创建了书签 下面是创建书签的链接。 现在我想读一下C代码中的书签。正如我所说,我们有不同的部分,如: 1.分布 2.工作人员 3.资源 4.预算等等 我可以从这段代码直接访问这个标题/部分,我得到了行和列 _Worksheet xlWorksheet = xlWorkbook.Sheets[1]; Range xlRange = xlWorksheet.UsedRange; var ex
2.工作人员 3.资源 4.预算等等 我可以从这段代码直接访问这个标题/部分,我得到了行和列
_Worksheet xlWorksheet = xlWorkbook.Sheets[1];
Range xlRange = xlWorksheet.UsedRange;
var externalDprDistribution = xlRange.Find("Distribution");
var colDist = externalDprDistribution.Column;
var rowDist = externalDprDistribution.Row;
但我仍然想在excel工作表中创建书签,然后我想访问c代码中的书签,并从中获取行和列。所以我需要一个代码,可以访问在c中创建的书签#
有什么帮助吗?
关于如果提取Excel文件,您将看到书签是超链接
<hyperlinks>
<hyperlink ref="G18" location="Test_Mark1" display="Bookmark1"/>
<hyperlink ref="G10" r:id="rId1"/>
</hyperlinks>
最近在一个项目中,我写了下面的测试代码来查找书签并更新它们,希望能有所帮助
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System.IO.Packaging;
using System.Xml;
using System.IO;
namespace OpenXMLTest
{
class Program
{
static void Main(string[] args)
{
string fileName = @"c:\temp\book1.xlsx";
Console.WriteLine("Start reading bookmark of excel...");
using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
{
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(fs, true))
{
WorkbookPart workbookPart = doc.WorkbookPart;
//find bookmarks
foreach (var workSheetPart in workbookPart.WorksheetParts)
{
var temp = workSheetPart.RootElement.Descendants<Hyperlinks>();
IEnumerable<Hyperlink> hyperLinks = null;
if (temp.Count() > 0)
{
hyperLinks = temp.First().Cast<Hyperlink>();
}
var workSheet = workSheetPart.Worksheet;
var cells = workSheet.Descendants<Cell>();
//loop each cell, find bookmark
foreach (var c in cells)
{
if (hyperLinks != null && hyperLinks.Count() > 0)
{
var hyperLink = hyperLinks.SingleOrDefault(x => x.Reference.Value == c.CellReference.Value);
if (hyperLink != null)
{
if (!string.IsNullOrEmpty(hyperLink.Location))
{
Console.WriteLine("Bookmark.DisplayName : " + hyperLink.Display);
Console.WriteLine("Bookmark.Location : " + hyperLink.Location);
//update bookmark
hyperLink.Location = "BookMark_Test";
hyperLink.Display = "updated bookmark";
Console.WriteLine("Bookmark.DisplayName after updated : " + hyperLink.Display);
Console.WriteLine("Bookmark.Location after updated : " + hyperLink.Location);
}
//for normal hyperlinks
//var hr = workSheetPart.HyperlinkRelationships.SingleOrDefault(x => x.Id == hyperLink.Id);
//if (hr != null)
//{
// Console.WriteLine(hr.Uri.ToString());
//}
}
}
workSheet.Save();
}
workbookPart.Workbook.Save();
}
}
}
Console.ReadKey();
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用DocumentFormat.OpenXml;
使用DocumentFormat.OpenXml.Packaging;
使用DocumentFormat.OpenXml.Spreadsheet;
使用System.IO.Packaging;
使用System.Xml;
使用System.IO;
名称空间OpenXMLTest
{
班级计划
{
静态void Main(字符串[]参数)
{
字符串文件名=@“c:\temp\book1.xlsx”;
Console.WriteLine(“开始阅读excel书签…”);
使用(FileStream fs=newfilestream(文件名,FileMode.Open,FileAccess.ReadWrite,FileShare.ReadWrite))
{
使用(SpreadsheetDocument文档=SpreadsheetDocument.Open(fs,true))
{
WorkbookPart WorkbookPart=doc.WorkbookPart;
//查找书签
foreach(workbookPart.WorksheetParts中的var工作表部件)
{
var temp=workSheetPart.RootElement.subjections();
IEnumerable超链接=null;
如果(温度计数()>0)
{
超链接=临时第一个().Cast();
}
var工作表=工作表零件工作表;
var cells=工作表。子体();
//循环每个单元格,查找书签
foreach(单元格中的var c)
{
if(超链接!=null&&hyperLinks.Count()>0)
{
var hyperLink=hyperLinks.SingleOrDefault(x=>x.Reference.Value==c.CellReference.Value);
如果(超链接!=null)
{
如果(!string.IsNullOrEmpty(hyperLink.Location))
{
Console.WriteLine(“Bookmark.DisplayName:+hyperLink.Display”);
Console.WriteLine(“Bookmark.Location:+hyperLink.Location”);
//更新书签
hyperLink.Location=“书签测试”;
hyperLink.Display=“更新的书签”;
Console.WriteLine(“更新后的Bookmark.DisplayName:+hyperLink.Display”);
Console.WriteLine(“更新后的Bookmark.Location:+hyperLink.Location”);
}
//对于普通超链接
//var hr=workSheetPart.HyperlinkRelationships.SingleOrDefault(x=>x.Id==hyperLink.Id);
//如果(hr!=null)
//{
//Console.WriteLine(hr.Uri.ToString());
//}
}
}
工作表。保存();
}
workbookPart.Workbook.Save();
}
}
}
Console.ReadKey();
}
}
}
您应该提到您用于从excel文件中读取的库。@alfoks我已经给出了office dll的参考,这里是Microsoft.office.Interop.excel;书签是指命名范围?如果您只对数据感兴趣,那么直接访问xml可能比通过互操作更快。2007年以后(可能还有2003年)的Excel工作簿只是压缩的XML文件。