0

アップロード時に Excel (.xlsx) ファイルの一部のデータ (この例では電話番号) をクレンジングしようとしています。ファイルを開くための次のコードがあります。

protected void Button1_Click(object sender, EventArgs e)
{
    if (FileUpload1.HasFile)
        try
        {
            string filePath = ("confirm//") + FileUpload1.FileName;
            FileUpload1.SaveAs(Server.MapPath(filePath));

            Microsoft.Office.Interop.Excel.Application xl = 
                new Microsoft.Office.Interop.Excel.Application();

            Workbook wb = 
                xl.Application.Workbooks.Open(Server.MapPath(filePath));

            wb.Activate();
            string csvPath = (filePath.Replace(".xlsx", ".csv"));

            wb.SaveAs(Server.MapPath(csvPath), 
                Microsoft.Office.Interop.Excel.XlFileFormat.xlCSV);

            wb.Close();             

            // call method to parse csv
            ReadRec(csvPath);
        }
        catch (Exception ex)
        {//}
    else
    {//}
}

次に、番号の先頭にまだゼロがない場合は、次のようにしてゼロを追加します。

private void ReadRec(string csvName)
{
    StreamReader Sr = new StreamReader(Server.MapPath(csvName));
    string s;

    while (!Sr.EndOfStream)
    {
        s = Sr.ReadLine();

        string company = s.Split(',')[0];
        string phone = s.Split(',')[1];
        string NAME = s.Split(',')[2];

        if (!phone.StartsWith("0"))
        {
            phone = "0" + phone;
        }
    }
    Sr.Close();
}

これはうまくいくようですが、私が理解できなかったのは、更新された数値をスプレッドシートに再挿入する方法 (または更新されたデータで新しい Excel ファイルを作成する方法) です。

誰かが私にいくつかの指針を与えることができますか?

4

3 に答える 3

2

OK、最終的には(私の現在の目的には十分)機能するソリューションをまとめましたが、理想とはほど遠いものです。

protected void Button1_Click(object sender, EventArgs e)
{       
    if (FileUpload1.HasFile)
        try
        {
            var excelApp = new Application();
            excelApp.Workbooks.Open("C:\\myFile.xls", Type.Missing, Type.Missing,
                                                   Type.Missing, Type.Missing,
                                                   Type.Missing, Type.Missing,
                                                   Type.Missing, Type.Missing,
                                                   Type.Missing, Type.Missing,
                                                   Type.Missing, Type.Missing,
                                                   Type.Missing, Type.Missing);
            var ws = excelApp.Worksheets;
            var worksheet = (Worksheet)ws.get_Item("Sheet1");
            Range range = worksheet.UsedRange;
            object[,] values = (object[,])range.Value2;

            for (int row = 1; row <= values.GetUpperBound(0); row++)
            {
                string phone = Convert.ToString(values[row, 2]);
                if (!phone.StartsWith("0"))
                {
                    phone = "0" + phone;
                }
                range.Cells.set_Item(row, 2, phone);
            }
            excelApp.Save("C:\\Leads.xls");
            excelApp.Quit();
       }
        catch (Exception ex)
        {//}
    else
    {//}
}

-編集- これが機能するためには、.xlsxファイルを Excel で開き、名前を付けて保存する必要がありました.xls

于 2013-04-09T15:38:09.687 に答える
0

私は実際にはを使用しないので、これは (おそらく) 動作するコードではありません。

C# での相互運用は非常に単純なはずです。通常、ドキュメントには C# 固有の例が含まれているため、これが失敗した場合は MSDN を参照してください。

protected void Button1_Click(object sender, EventArgs e)
{
    if (FileUpload1.HasFile)
        try
        {
            string filePath = ("confirm//") + FileUpload1.FileName;
            FileUpload1.SaveAs(Server.MapPath(filePath));

            Microsoft.Office.Interop.Excel.Application xl = 
                new Microsoft.Office.Interop.Excel.Application();

            Workbook wb = 
                xl.Application.Workbooks.Open(Server.MapPath(filePath));

            wb.Activate();

            Worksheet ws = wb.Worksheets(1); // use the first sheet 1-based index i think

            for (long row = 2; i <= ws.UsedRange.Rows.Count; i++) {
                // assume row 1 is a title so start at row 2
                // ws.Cells(row, 1) // company
                // ws.Cells(row, 2) // phone
                // ws.Cells(row, 3) // name
                if (!ws.Cells(row,2).Value2.StartsWith("0") {
                    ws.Cells(row,2).Value2 = "0" + ws.Cells(row,2).Value2
                }
            }

            //string csvPath = (filePath.Replace(".xlsx", ".csv"));

            //wb.SaveAs(Server.MapPath(csvPath), 
            //    Microsoft.Office.Interop.Excel.XlFileFormat.xlCSV);
            wb.Save(); // as were directly modifying the file, no need to save elsewhere

            wb.Close();             

            // call method to parse csv
            //ReadRec(csvPath);
        }
        catch (Exception ex)
        {//}
    else
    {//}
}
于 2013-04-09T12:48:15.633 に答える