4

レポートを生成する 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

4

1 に答える 1