2

HTML テーブルを作成し、それをスプレッドシートとしてユーザーに送信する必要があります。私は昔ながらの ASP.NET でこれを何度も行ってきましたが、SharePoint では後れを取っています。これは、モジュールに格納された 3 つのファイル (サンドボックス ソリューションからアクセス可能) を呼び出すイベント ハンドラーを備えた単純なボタンであり、適切なコンテンツ タイプとコンテンツ配置と共にテキストをユーザーに押し出そうとします。この部分が機能するようになると、SampleData.txt の部分が複数のリストのデータに置き換えられます。残念ながら、ページはポストバックしますが、開いたりダウンロードしたりするためのファイルはユーザーに提供されません。

Response.Write が Web パーツで使用できないことをいくつかの場所で読みましたが、確かにこのタスクを達成する他の方法があります...? これが私がやりたいことです-使用可能な代替手段はありますか?

    protected override void CreateChildControls()
    {
        Button ReportButton = new Button();
        ReportButton.Text = "Generate DCPDS Report";
        ReportButton.Click += new EventHandler(ReportButton_Click);
        this.Controls.Add(ReportButton);
    }

    protected void ReportButton_Click(Object sender, EventArgs e)
    {
        string header = "";
        string sampleData = "";
        string footer = "";

        using (SPWeb webRoot = SPContext.Current.Site.RootWeb)
        {
            header = webRoot.GetFileAsString("SpreadsheetParts/Header.txt");
            sampleData = webRoot.GetFileAsString("SpreadsheetParts/SampleData.txt");
            footer = webRoot.GetFileAsString("SpreadsheetParts/Footer.txt");
        }

        StringBuilder sb = new StringBuilder();
        sb.Append(header);
        sb.Append(sampleData);
        sb.Append(footer);

        Page.Response.Clear();
        HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
        HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=June2010Spreadsheet.xls");
        HttpContext.Current.Response.Write(sb.ToString());
        //HttpContext.Current.Response.End();
    }
4

3 に答える 3

1

私はこれをテストしていません。これは興味深い概念実証になるでしょうが、テスト用の未使用の SharePoint 2010 サーバーを用意していないため、テストすることはできません。しかし、考えてみれば、Excel シートの内容を非表示のフィールドに配置して、次のようなことを行うことはできませんでした。

HTML:

<script type="text/javascript">
   function downloadExcel() {
        location.href='data:application/download,' + encodeURIComponent(
        document.getElementById('<%= hfExcelData.ClientID %>').value
    );
   }
</script>

C#:

protected override void CreateChildControls()
{
    Button ReportButton = new Button();
    ReportButton.Text = "Generate DCPDS Report";
    ReportButton.Click += new EventHandler(ReportButton_Click);
    this.Controls.Add(ReportButton);
}

protected void ReportButton_Click(Object sender, EventArgs e)
{
    string header = "";
    string sampleData = "";
    string footer = "";

    using (SPWeb webRoot = SPContext.Current.Site.RootWeb)
    {
        header = webRoot.GetFileAsString("SpreadsheetParts/Header.txt");
        sampleData = webRoot.GetFileAsString("SpreadsheetParts/SampleData.txt");
        footer = webRoot.GetFileAsString("SpreadsheetParts/Footer.txt");
    }

    StringBuilder sb = new StringBuilder();
    sb.Append(header);
    sb.Append(sampleData);
    sb.Append(footer);

    this.hfExcelData.value = sb.ToString();

    Page.ClientScript.RegisterStartupScript(this.GetType(), "ExcelUploader", "downloadExcel();", true)

}
于 2012-09-11T18:06:18.833 に答える
0

ボタンまたはリンクボタンでデフォルトの JavaScript 関数を使用する STSNavigate(dUrl);

HttpContext.Current.Response を作成するページを呼び出す

于 2014-09-17T21:10:17.387 に答える