0
我正在嘗試更改已存在的單詞文件的數據。我在嵌入式Excel文件中處理數據方面取得了成功,但不知何故,這些數據並未在Word文件中使用。此外,在Excel文件中,我在最後一行之前看到綠色標記,可能表示數據的最後一行仍未被考慮。有人可以幫忙處理這個問題嗎?如何在Open XML C#for Word中添加圖表數據?
我的確提到了很多來自ericwhite.com/openxmldeveloper.org的鏈接,但沒有運氣。
的代碼如下:
public void ReplaceChartValues(string placeholderCaption, System.Data.DataTable chartData, string newCaption)
{
if (wordDocument != null)
{
try
{
ChartPart target = mainDocumentPart
.ChartParts
.Where(r => r
.ChartSpace
.GetFirstChild<Chart>()
.Title
.InnerText
.StartsWith(placeholderCaption)
)
.FirstOrDefault();
if (target != null)
{
target
.ChartSpace
.GetFirstChild<Chart>()
.Title
.ChartText
.RichText
.GetFirstChild<DocumentFormat.OpenXml.Drawing.Paragraph>()
.GetFirstChild<DocumentFormat.OpenXml.Drawing.Run>()
.Text
.Text = newCaption;
ExternalData externalData =
target
.ChartSpace
.Elements<ExternalData>()
.FirstOrDefault();
if (externalData != null)
{
EmbeddedPackagePart embeddedPackagePart =
(EmbeddedPackagePart)
target
.Parts
.Where(r => r.RelationshipId == externalData.Id)
.FirstOrDefault()
.OpenXmlPart;
if (embeddedPackagePart != null)
{
using (Stream stream = embeddedPackagePart.GetStream())
{
using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(stream, true))
{
DocumentFormat.OpenXml.Spreadsheet.Sheet worksheet = (DocumentFormat.OpenXml.Spreadsheet.Sheet)spreadsheetDocument
.WorkbookPart
.Workbook
.Sheets
.FirstOrDefault();
WorksheetPart worksheetPart = (WorksheetPart)
spreadsheetDocument
.WorkbookPart
.Parts
.Where(r => r.RelationshipId == worksheet.Id)
.FirstOrDefault()
.OpenXmlPart;
DocumentFormat.OpenXml.Spreadsheet.SheetData sheetData =
worksheetPart
.Worksheet
.Elements<DocumentFormat.OpenXml.Spreadsheet.SheetData>()
.FirstOrDefault();
var existingRows = sheetData
.Elements<DocumentFormat.OpenXml.Spreadsheet.Row>()
.Skip(1)
.ToArray();
for (int ctr = 0; ctr < existingRows.Length; ctr++)
{
sheetData
.RemoveChild<DocumentFormat.OpenXml.Spreadsheet.Row>(existingRows[ctr]);
}
for (int ctr = 0; ctr < chartData.Rows.Count; ctr++)
{
DocumentFormat.OpenXml.Spreadsheet.Row newRecord = new DocumentFormat.OpenXml.Spreadsheet.Row();
for (int ctr2 = 0; ctr2 < chartData.Columns.Count; ctr2++)
{
DocumentFormat.OpenXml.Spreadsheet.Cell newCell = new DocumentFormat.OpenXml.Spreadsheet.Cell();
DocumentFormat.OpenXml.Spreadsheet.CellValue newCellValue = new DocumentFormat.OpenXml.Spreadsheet.CellValue();
if (chartData.Columns[ctr2].DataType == typeof(DateTime))
{
newCellValue.Text = Convert.ToDateTime(chartData.Rows[ctr][ctr2]).ToString("MM/dd/yyyy");
newCell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.Date;
}
else if (chartData.Columns[ctr2].DataType == typeof(decimal))
{
newCellValue.Text = chartData.Rows[ctr][ctr2].ToString();
newCell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.Number;
}
else
{
newCellValue.Text = chartData.Rows[ctr][ctr2].ToString();
newCell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.String;
}
newCell.AppendChild(newCellValue);
newRecord.AppendChild(newCell);
}
sheetData.AppendChild(newRecord);
}
spreadsheetDocument.Save();
}
}
}
}
}
}
catch (Exception)
{
}
finally
{
// Save the document.
mainDocumentPart.Document.Save();
}
}
}
不知道爲什麼這個問題是降投票...在對此進行評估之前應該提供一些參考資料。 –