tôi thu hẹp nó xuống:Bảng tính OpenXML: Excel đưa ra lỗi, sau đó sửa lỗi và nó hoạt động. (C#)
//aantal auto's
Row aantalAutosRow = new Row();
aantalAutosRow.RowIndex = Convert.ToUInt32((tblXML.Rows.Count) + 2);
Cell aantalAutosCell = new Cell();
aantalAutosCell.CellReference = getColumnName(1);
aantalAutosCell.CellValue = new CellValue("Hoi");
aantalAutosRow.Append(aantalAutosCell);
sheetData.Append(aantalAutosRow);
này tạo ra các tế bào sau khi tôi bấm vào Có khi Excel nhắc nhở để sửa chữa các tập tin (sheet.xml)
Toàn bộ lớp:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System.IO;
using System.Xml;
using System.Data;
namespace XML_naar_Excel
{
class Excel
{
public void convertToExcel(string padXml)
{
//maak dataset en vul met ingevoerde xml
DataSet dsXML = new DataSet();
dsXML.ReadXml(padXml);
DataTable tblXML = dsXML.Tables[2];
//opslaan
string padXlsx = Path.GetDirectoryName(padXml) + "\\voorraad " + DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year + ".xlsx";
//spreadsheet
using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(padXlsx, SpreadsheetDocumentType.Workbook))
{
WorkbookPart workbookPart = spreadsheetDocument.AddWorkbookPart();
WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
Workbook workbook = new Workbook();
FileVersion fv = new FileVersion();
fv.ApplicationName = "Microsoft Office Excel";
Worksheet worksheet = new Worksheet();
SheetData sheetData = new SheetData();
//styles
Style s = new Style();
WorkbookStylesPart stylesPart = spreadsheetDocument.WorkbookPart.AddNewPart<WorkbookStylesPart>();
stylesPart.Stylesheet = s.GenerateStyleSheet();
stylesPart.Stylesheet.Save();
//kolommen
Columns columns = new Columns();
for (int i = 1; i < tblXML.Columns.Count; i++)
{
Column column = new Column();
column.Min = Convert.ToUInt32(i);
column.Max = Convert.ToUInt32(i + 1);
int lengte = tblXML.Rows[13][i-1].ToString().Length;
if (lengte < 10)
{
lengte = 10;
}
else if (lengte > 35)
{
lengte = 35;
}
else
{
lengte += 5;
}
column.Width = lengte;
column.BestFit = true;
columns.Append(column);
}
worksheet.Append(columns);
//header
Row header = new Row();
header.RowIndex = (UInt32)1;
foreach (DataColumn columnInDataTable in tblXML.Columns)
{
Cell headerCell = createTextCell(tblXML.Columns.IndexOf(columnInDataTable) + 1, 1, columnInDataTable.ColumnName);
headerCell.StyleIndex = 1;
header.AppendChild(headerCell);
}
sheetData.AppendChild(header);
// Add a row to the cell table.
for (int i = 1; i < tblXML.Rows.Count; i++)
{
Row row;
row = new Row() { RowIndex = Convert.ToUInt32(i) + 1 };
for (int j = 0; j < tblXML.Columns.Count; j++)
{
Cell newCell = new Cell()
{
CellReference = getColumnName(i),
DataType = CellValues.String,
StyleIndex = 6,
CellValue = new CellValue(tblXML.Rows[i][j].ToString()),
};
row.Append(newCell);
}
sheetData.Append(row);
}
//autofilter
string laatsteKolom = zoekLaatsteKolom(tblXML);
AutoFilter autoFilter = new AutoFilter();
autoFilter.Reference = "A1:" + laatsteKolom + "1";
//aantal auto's
Row aantalAutosRow = new Row();
aantalAutosRow.RowIndex = Convert.ToUInt32((tblXML.Rows.Count) + 2);
Cell aantalAutosCell = new Cell();
aantalAutosCell.CellReference = getColumnName(1);
aantalAutosCell.CellValue = new CellValue("Hoi");
//CellFormula berekenAantalAutos = new CellFormula();
//berekenAantalAutos.Text = "=COUNTA(A2:A" + tblXML.Rows.Count.ToString();
//aantalAutosCell.Append(berekenAantalAutos);
aantalAutosRow.Append(aantalAutosCell);
sheetData.Append(aantalAutosRow);
worksheet.Append(sheetData);
worksheet.Append(autoFilter);
worksheetPart.Worksheet = worksheet;
worksheetPart.Worksheet.Save();
Sheets sheets = new Sheets();
Sheet sheet = new Sheet();
sheet.Name = "Voorraad";
sheet.SheetId = 1;
sheet.Id = workbookPart.GetIdOfPart(worksheetPart);
sheets.Append(sheet);
workbook.Append(fv);
workbook.Append(sheets);
spreadsheetDocument.WorkbookPart.Workbook = workbook;
spreadsheetDocument.WorkbookPart.Workbook.Save();
spreadsheetDocument.Close();
}
}
//kolom naam (letter) ophalen
private string getColumnName(int columnIndex)
{
int dividend = columnIndex;
string columnName = String.Empty;
int modifier;
while (dividend > 0)
{
modifier = (dividend - 1) % 26;
columnName =
Convert.ToChar(65 + modifier).ToString() + columnName;
dividend = (int)((dividend - modifier)/26);
}
return columnName;
}
private Cell createTextCell(int columnIndex, int rowIndex, object cellValue)
{
Cell cell = new Cell();
cell.DataType = CellValues.InlineString;
cell.CellReference = getColumnName(columnIndex) + rowIndex;
InlineString inlineString = new InlineString();
Text t = new Text();
t.Text = cellValue.ToString();
inlineString.AppendChild(t);
cell.AppendChild(inlineString);
return cell;
}
string zoekLaatsteKolom(DataTable tblXML)
{
string kolom;
kolom = getColumnName(tblXML.Columns.Count);
return kolom;
}
}
}
Ai đó có thể cho tôi biết những gì tôi đang làm là bất hợp pháp với Excel không? Tôi nghĩ rằng excel làm cho SharedStrings khi vá nó. Tôi chưa bao giờ làm việc với SharedStrings và tôi hy vọng tôi không phải làm vậy.
Bạn có thể thử tải OpenXMLSDKToolV25.msi từ http://www.microsoft.com/en-us/download/details.aspx?id=30425 nếu bạn tải tập tin được tạo của bạn vào Năng suất Công cụ trong nhiều trường hợp nó có thể cho bạn biết những gì là bất hợp pháp trong tập tin được tạo ra của bạn. –