2013-09-05 20 views
5

WebページからExcelにデータをエクスポートしています。これは簡単ではありませんが、データには<p>というタグがあります。これにより、データがすべて同じセル内にあるときにExcelが新しい行を作成します。いくつかの研究の後、私はmso-data-placementがトリックを行うべきであることを発見しましたが、それは機能しません。 Excelが開き、データが表示されますが、余分な行が作成されます。ここで私はデータをエクスポートするために使用するコードは次のとおりです。mso-data-placement:同じセルが動作しない

protected void doexcel() 
    { 
     string style = @"<style type='text/css'>P {mso-data-placement:same-cell; font-weight:bold;}</style>"; 


    HttpResponse response = HttpContext.Current.Response; 

    // first let's clean up the response.object 
    response.Clear(); 
    response.Charset = ""; 

    //set the response mime type for excel 
    response.ContentType = "application/vnd.ms-excel"; 
    Random RandomClass = new Random(); 
    int RandomNumber = RandomClass.Next(); 
    String filename = "a" + RandomNumber + DateTime.Now + ".xls"; 
    response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\""); 

    // create a string writer 
    using (StringWriter sw = new StringWriter()) 
    { 
     using (HtmlTextWriter htw = new HtmlTextWriter(sw)) 
     { 

     HttpContext.Current.Response.Write(style); 
      SqlDataSourceEmployeeAssets.ConnectionString = MyObjects.Application.CurrentContext.ConnectionString; 
      String sql = (string)Session["sql"]; 
      SqlDataSourceEmployeeAssets.SelectCommand = sql; 
      // lCount.Text = "Query returned " + getCount(query) + " rows."; 
      DataGrid dge = new DataGrid(); 
      dge.DataSource = SqlDataSourceEmployeeAssets; 
      dge.DataBind(); 
      dge.RenderControl(htw); 
      response.Write(sw.ToString()); 
      response.End(); 
     } 
    } 
} 

これは私に悲しみを与えているデータベース内の生データの例である:

<P>4/13/2011 : Cheng "Jonathan" Vaing is with BSES Graffiti Unit.</P><P>4/13/2011 : Cheng "Jonathan" Vaing is with</P> 

提案?


私は

  1. 他の物事のカップルを試してみました、私はまっすぐに、データへ行き、段落タグをインラインにMSO-データ配置属性を追加しました。まだ動作しませんでした。データは、私はどちらか動作しませんでした他のmso- *属性は、試してみました。この

<P style="mso-data-placement:same-cell> my data </p>

  1. のように見えました。例えば、私はこのああ、なぜExcelが認識しないのはなぜ

<style type='text/css'>P {mso-highlight:yellow}</style>";

私mso- *属性のように見えるために私のスタイルシートを変更しました?!?!

答えて

0

解決策はありますが、それはきれいではありません。

dge.DataBindの後に、次のコードを挿入します。これは、各セル

foreach (DataGridItem dgi in dge.Items) 
{     
     foreach (TableCell cell in dgi.Cells) 
     { 
      cell.Text = WebUtility.HtmlEncode(cell.Text);; 
     } 
}   

Excelファイルのテキストをエンコードし、開いたときに、一つのセル内のマークアップと生データ、すべてを表示する必要があります。

Excelが実際にテキストをエンコードするため、これが機能することがわかりました。 Excelの動作を確認するには、次の操作を実行します。

  1. Excelで新しいブックを作成します(Office 2013を使用しています)。
  2. 最初のセルに、生データを貼り付けます(表示されているように)。最初にF2(セルに挿入)を押してテキストを貼り付けます。
  3. ブックをHTMLファイル(またはWebページ)として保存します。
  4. Windowsエクスプローラを使用して、ファイルを保存したフォルダの場所に移動します。あなたのファイルと同じ名前の隠しフォルダがあるはずです(私はそれが隠されていると思います)。たとえば、ブックがBook1.htmの場合、Book1_filesという名前のフォルダが存在するはずです。
  5. このフォルダには、sheet001.htmという名前のHTMファイルが必要です。このファイルをメモ帳(または任意のテキストエディタ... ExcelまたはWordでない)で開く
  6. 生データを探します。テキストにはHTMLマークアップが表示されず、エンコードされたバージョンが表示されます。

これが役に立ちます。

関連する問題