C# excel文件是使用DocumentFormat.OpenXML创建的,但在excel中操作时需要修复
我是DocumentFormat程序的新手。我搜索了web,找到了使用OpenXML将数据集导出到excel的示例。按照代码生成excel文件。但是,当文件打开时,存在一个问题,Excel显示“报告中的某些内容有问题。是否希望我们尝试尽可能多地恢复?”当用户单击“是”时,数据正常。我搜索了这个网站,看起来像是使用InlineString的字符串列类型。我错了吗?我不知道是哪个代码导致了这个问题。有人能告诉我吗?提前谢谢 我在网上找到了以下代码:C# excel文件是使用DocumentFormat.OpenXML创建的,但在excel中操作时需要修复,c#,vb.net,C#,Vb.net,我是DocumentFormat程序的新手。我搜索了web,找到了使用OpenXML将数据集导出到excel的示例。按照代码生成excel文件。但是,当文件打开时,存在一个问题,Excel显示“报告中的某些内容有问题。是否希望我们尝试尽可能多地恢复?”当用户单击“是”时,数据正常。我搜索了这个网站,看起来像是使用InlineString的字符串列类型。我错了吗?我不知道是哪个代码导致了这个问题。有人能告诉我吗?提前谢谢 我在网上找到了以下代码: namespace ExcelObject { p
namespace ExcelObject
{
public class ExcelStream
{
SpreadsheetDocument document = null;
public MemoryStream GetExcelStream(DataSet dataset)
{
DataSet ds = dataset;
using (var ms = new MemoryStream())
{
//Create workbook in memory
document = SpreadsheetDocument.Create(ms, SpreadsheetDocumentType.Workbook);
//Add workbook
var workbookpart = document.AddWorkbookPart();
workbookpart.Workbook = new Workbook();
//add worksheet to wrokbook
var worksheet = workbookpart.AddNewPart<WorksheetPart>();
worksheet.Worksheet = new Worksheet(new SheetData());
var sheets = document.WorkbookPart.Workbook.AppendChild(new Sheets());
//Add a new worksheet and associte it with the workbook.
var mainSheet = new Sheet()
{
Id = document.WorkbookPart.GetIdOfPart(worksheet),
SheetId = 1,
Name = "TestReport"
};
sheets.Append(mainSheet);
uint rowIndex = 0;
//Get sheet data
var sheetData = worksheet.Worksheet.GetFirstChild<SheetData>();
var row = new Row { RowIndex = ++rowIndex };
AddColumnHeaderRow(ds, row, sheetData);
AddDataRows(ds, rowIndex, sheetData);
workbookpart.Workbook.Save();
document.Close();
return ms;
}
}
private static void AddColumnHeaderRow(DataSet ds, Row row, SheetData sheetData)
{
for (var i = 0; i < ds.Tables[0].Columns.Count; i++)
{
var cell = new Cell { DataType = CellValues.InlineString, StyleIndex = 1 };
var inlineCell = new InlineString();
var cellText = new Text { Text = ds.Tables[0].Columns[i].ColumnName };
inlineCell.AppendChild<Text>(cellText);
cell.AppendChild<InlineString>(inlineCell);
row.AppendChild<Cell>(cell);
}
sheetData.AppendChild(row);
}
private static void AddDataRows(DataSet ds, uint rowIndex, SheetData sheetData)
{
for (var r = 0; r < ds.Tables[0].Rows.Count; r++)
{
var row = new Row { RowIndex = ++rowIndex };
for (var c = 0; c < ds.Tables[0].Columns.Count; c++)
{
var cell = new Cell { DataType = CellValues.InlineString };
var istring = new InlineString();
var t = new Text
{
Text = ds.Tables[0].Rows[r][c].ToString()
};
istring.AppendChild<Text>(t);
cell.AppendChild<InlineString>(istring);
row.AppendChild(cell);
}
//append each data row to sheet data
sheetData.AppendChild<Row>(row);
}
}
}
}
我发现我的代码有什么问题。这个傻瓜有我没有的风格。因此,我将“var cell=new cell{DataType=CellValues.InlineString,StyleIndex=1}”更改为“var cell=new cell{DataType=CellValues.InlineString}”;打开文件时错误消息没有显示。我发现了代码的错误。这个傻瓜有我没有的风格。因此,我将“var cell=new cell{DataType=CellValues.InlineString,StyleIndex=1}”更改为“var cell=new cell{DataType=CellValues.InlineString}”;打开文件时没有显示错误消息
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim dt As New DataTable("Test")
dt.Columns.Add("Code", GetType(String))
dt.Columns.Add("Price", GetType(String))
Dim dr As DataRow = dt.NewRow()
dr("Code") = "ABC"
dr("Price") = "12"
dt.Rows.Add(dr)
Dim dr1 As DataRow = dt.NewRow()
dr1("Code") = "DEF"
dr1("Price") = "1"
dt.Rows.Add(dr1)
Dim ds As New DataSet
ds.Tables.Add(dt)
Dim t As ExcelStreamObject.ExcelStream = New ExcelStreamObject.ExcelStream
Dim ms As MemoryStream = t.GetExcelStream(ds)
Response.Clear()
Response.ClearContent()
Response.ClearHeaders()
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Response.AppendHeader("Content-Disposition", "attachment; filename=TestReport.xlsx")
Response.BinaryWrite(ms.ToArray())
Response.Flush()
Response.Close()
Response.End()
End Sub