レポートを生成する ASMX Web サービスが多数あり、Web サービス用に事前構成およびフォーマットされたクエリ テーブルを含む .XLSX ファイルをダウンロードするためのリンクを追加して、ユーザーを支援したいと考えています。
その後、現在のように独自のグラフと派生レポートを作成できるようになりますが、すべてを再構築せずにデータを更新することもできます。
var machStore = IsolatedStorageFile.GetMachineStoreForAssembly();
string fileName = Path.ChangeExtension(Path.GetRandomFileName(), ".xlsx");
using (
IsolatedStorageFileStream ifStream = new IsolatedStorageFileStream(
fileName,
FileMode.CreateNew,
FileAccess.ReadWrite,
FileShare.Read,
machStore
)
)
{
using (
SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(
ifStream,
SpreadsheetDocumentType.Workbook
)
)
{
// Add a WorkbookPart to the document.
WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook();
// Add a WorksheetPart to the WorkbookPart.
WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
// Add Sheets to the Workbook.
Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());
ConnectionsPart connPart = workbookpart.AddNewPart<ConnectionsPart>();
connPart.Connections = new Connections();
Connection c = new Connection(){
Id = 1, //should be automatic??
Name = "List",
Type = 4, //Web Query
RefreshedVersion = 4,
MinRefreshableVersion= 1,
Background = false,
SaveData = true,
RefreshOnLoad = true,
WebQueryProperties = new WebQueryProperties()
{
XmlSource = true,
SourceData = true,
ParsePreTag = true,
Consecutive = true,
RefreshedInExcel2000 = true,
Url = "http://server/data/Demand.asmx/List"
}
};
connPart.Connections.Append(c);
QueryTablePart qt = worksheetPart.AddNewPart<QueryTablePart>();
qt.QueryTable = new QueryTable(){
Name="List",
ConnectionId = c.Id,
AutoFormatId = 16,//From where?
ApplyNumberFormats = true,
ApplyBorderFormats = true,
ApplyFontFormats = true,
ApplyPatternFormats = true,
ApplyAlignmentFormats = false,
ApplyWidthHeightFormats = false
};
// Append a new worksheet and associate it with the workbook.
Sheet sheet = new Sheet() {
Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart),
SheetId = 1,
Name = "mySheet"
};
sheets.Append(sheet);
sheets.Append(qt.QueryTable);
workbookpart.Workbook.Save();
// Close the document.
spreadsheetDocument.Close();
}
ifStream.Position = 0;
response.Clear();
response.AddHeader("content-disposition", "attachment; filename=" + fileName);
response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
ifStream.CopyTo(response.OutputStream);
}
ダウンロードすると、ファイルは Excel 2010 で開きますが、クエリ テーブルはシートとして表示されません。のドキュメントには、クラスDocumentFormat.OpenXml
のインスタンスを操作する方法が明確に説明されていませんQueryTable