C # تطبيق وحدة التحكم حفظ ملف اكسل (لا تطالب)

أريد أن أكتب تطبيق وحدة التحكم حيث سأقوم بسحب البيانات إلى مجموعة بيانات. ثم أريد حفظ الملف على محرك أقراص ثابت محلي. لديّ رمز في webapp الذي يطالب المستخدم بحفظه ، لكني أرغب في حفظه على القرص الصلب المحلي للخادم وإرسال البريد الإلكتروني إلى المستخدم. هنا هو رمز بلادي حتى الآن:

Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=Test.xls;");
Response.Charset = "";

System.IO.StringWriter sw = new System.IO.StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
dg.RenderControl(htw);
Response.Write("
");                   
Response.Write(sw.ToString());

Response.End();

وسأكون ممتنا أي مساعدة. شكر.

0
عفوا؟ هل يمكنك إصلاح السؤال؟
وأضاف المؤلف Mark Segal, مصدر

2 إجابة

تتم مطالبة المستخدم بحفظ الملف من خلال المتصفح ، وليس من خلال تطبيق الويب. إذا كان لديك تطبيق وحدة تحكم تنفيذ محلي ، يمكنك تجاوز كل ذلك وببساطة فتح FileStream للكتابة ، واربط HtmlTextWriter مع ذلك. سيؤدي فقط إلى مطالبة المستخدم بالكتابة فوق إذا كتبت الرمز بشكل صريح للقيام بذلك.

0
وأضاف
شكرا على التعليق. يعمل تطبيق وحدة التحكم هذا على جدول زمني وإنشاء التقارير تلقائيًا وإرسال بريد إلكتروني مرفق به بحيث لا يتطلب تفاعل المستخدم أو المطالبة. سوف ننظر في filestream و htmltextwriter.
وأضاف المؤلف KAUSHAL SHAH, مصدر
حسنًا ، لقد قمت بإنشاء filestream وتخزين البيانات باستخدام ملف محدد بعلامات جدولة. عندما يفتح المستخدم في Excel ، يقوم Excel تلقائيًا بتحويل علامة التبويب إلى أعمدة. الإجابة الأخرى صحيحة نوعًا ما ولكنها تتطلب أيضًا ملف excel على الخادم الذي ينشئ ملفًا ومخازن في محرك الأقراص الثابت للخادم. إذا كنت ترغب في تنسيق العمود والخط ، وقم بإجراء عملية حسابية في ملف excel ، فاحرص على استخدام Interop Excel.
وأضاف المؤلف KAUSHAL SHAH, مصدر

هذا مقتطف من تطبيق وحدة التحكم الخاصة بي ، فإنه يحفظ ملف دون مطالبة من المستخدم. يجب عليك إضافة مرجع COM لـ Excel.

    private void btnExcel_Click(object sender, EventArgs e)
    {
        Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
        app.Visible = true;
        Microsoft.Office.Interop.Excel.Workbook wb = app.Workbooks.Add(1);
        Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[1];
        int i = 1;
        int i2 = 1;
        foreach (ListViewItem lvi in lvwResults.Items)
        {
            i = 1;
            foreach (ListViewItem.ListViewSubItem lvs in lvi.SubItems)
            {
                ws.Cells[i2, i] = lvs.Text;
                i++;
            }
            i2++;
        }

        wb.SaveAs(String.Format(@"C:\MyReportABC-{0}-{1}", String.Format("{0:yyyyMMdd}", DateTime.Today), String.Format("{0:hhmm}", DateTime.Now)));
        wb.Close(true);
    }

إخراج ملف باسم MyReportABC-20120621-0539.xls (التغييرات في كل مرة ، يمكنك إضافة معرف مستخدم في السلسلة أيضًا)

0
وأضاف
شكرا لرمز ولكن هذا يتطلب التفوق على الخادم. لن يعمل إذا لم يتم تثبيت excel. إذا لم أتمكن من إيجاد الحل ، فسيكون هذا هو الحل الأخير.
وأضاف المؤلف KAUSHAL SHAH, مصدر
قلت تطبيق وحدة التحكم ، وكذلك الحفظ على محرك أقراص محلي. إذن ، ما الخادم؟ أي شخص يستخدمه سوف يحتاج إلى Excel على سطح المكتب ، ولكن هذا من الناحية العملية في هذه الأيام. لا يتطلب ذلك وجود Excel على أي خادم إذا كنت تستخدمه في وحدة تحكم أو تطبيق winform أو wpf.
وأضاف المؤلف GrayFox374, مصدر