c# - 为什么无法通过 OpenXML 获取 excel 文件的单元格值?
问题描述
我必须读取 excel 文件作为示例:
我的代码阅读文件:
SPWeb web = SPContext.Current.Web;
SPFile file = web.GetFile(path);
Stream dataStream = file.OpenBinaryStream();
// Open the document .
using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(dataStream, true))
{
WorksheetPart worksheetPart = GetWorksheetPartByName(spreadSheet, "Sheet1");
if (worksheetPart != null)
{
SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
DataTable dt = new DataTable();
dt.Columns.Add("Id");
dt.Columns.Add("Title");
dt.Columns.Add("Gender");
dt.Columns.Add("Birthday");
foreach (Row r in sheetData.Elements<Row>())
{
if (r.RowIndex.Value > 1)
{
dt.Rows.Add();
int i = 0;
foreach (Cell c in r.Elements<Cell>())
{
dt.Rows[dt.Rows.Count - 1][i] = c.CellValue.Text;
i++;
}
}
}
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
Gridview Result 仅获得正确的第一列:
为什么无法通过 OpenXML 获取单元格的文本值?
解决方案
您可以通过使用 DataTable 的 Open XML 来执行此操作
//将Datatable转换为excel字节内存流
dte=DataTable(); //Your DataTable
XLWorkbook wb = new XLWorkbook();
wb.Worksheets.Add(dte, SheetName);
var Excelbytes = new byte[0];
using (var ms = new MemoryStream())
{
wb.SaveAs(ms);
Excelbytes = ms.ToArray();
}
MemoryStream memorystream = new MemoryStream();
//将内存流转换为excel
using (MemoryStream memStream = new MemoryStream())
{
memStream.Write(byteArray, 0, byteArray.Length);
XLWorkbook wb = new XLWorkbook(memStream, XLEventTracking.Disabled);
string myName = Server.UrlEncode(FileName + ".xlsx");
MemoryStream stream = (MemoryStream)GetStream(wb);
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment; filename=" + myName);
Response.ContentType = "application/vnd.ms-excel";
Response.BinaryWrite(stream.ToArray());
Response.End();
}
推荐阅读
- python - -bash:manage.py:尝试运行 git 项目时找不到命令
- sql-server - BulkInsert CSV into DB - 为什么我的最后一行被插入两次
- django - 如何在 Django admin 中显示相关的模型属性?
- amazon-web-services - 如何从 Application Load Balancer 中删除 AWS WAF Classic?
- pulseaudio - Pulseaudio:无法将 sink.monitor 环回声卡扬声器
- xaml - Xamarin 标签单击更改复选框状态仅 Xaml
- tensorflow2.0 - Tensorflow 2 - OperatorNotAllowedInGraphError:不允许使用 `tf.Tensor` 作为 Python `bool`:此函数中禁用了 AutoGraph
- javascript - vue-cli-service 构建无法找到 main.js
- typescript - 当逻辑上应该知道类型时,为什么我必须使用类型断言?
- python - 嵌入中的 Discord.py 和表情符号