C # VS2005 Конвертировать разделитель трубы .TXT в книгу Excel .XLS - PullRequest
1 голос
/ 08 ноября 2011

Я использую VS2005 C #, и я пытаюсь преобразовать текстовый файл с разделителями трубы в формат книги Excel.Ниже приведен мой код:

public partial class TextToExcel : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void SaveAsExcelBtn_Click(object sender, EventArgs e)
    {

        string xlExtension = ".csv";
        string strExcelOutputFilename = "C:/Documents and Settings/rhlim/My Documents/" + DateTime.Now.ToString("yyyyMMddHHmmss") + xlExtension;

        // Before attempting to import the file, verify 
        // that the FileUpload control contains a file. 
        if (TextFile.HasFile)
        {
            // Get the name of the Excel spreadsheet. 
            string strFileName = Server.HtmlEncode(TextFile.FileName);

            // Get the extension of the text. 
            string strExtension = Path.GetExtension(strFileName);



            // Validate the file extension. 
            if (strExtension != ".TXT" && strExtension!=".txt")
            {

                Response.Write("<script>alert('Failed to import. Cause: Invalid text file.');</script>");
                return;
            }




            // Generate the file name to save the text file. 
            //string strUploadFileName = "C:/Documents and Settings/rhlim/My Documents/Visual Studio 2005/WebSites/SoD/UploadFiles/" + DateTime.Now.ToString("yyyyMMddHHmmss") + strExtension;

            using (StreamWriter outputWriter = new StreamWriter(File.Create(strExcelOutputFilename)))
            {
                StreamReader inputReader = new StreamReader(TextFile.FileContent);
                string fileContent = inputReader.ReadToEnd();
                fileContent = fileContent.Replace('|', ';');
                outputWriter.Write(fileContent);
                TextFile.SaveAs(strExcelOutputFilename);
                inputReader.Close();
            }


            //string strExcelOutputFilename = "C:/Documents and Settings/rhlim/My Documents/" + DateTime.Now.ToString("yyyyMMddHHmmss")+xlExtension;
            // Save the Excel spreadsheet on server. 
            //TextFile.SaveAs (strExcelOutputFilename);


        }
        else Response.Write("<script>alert('Failed to import. Cause: No file found');</script>");
    }
}

В настоящее время у меня возникают ошибки при сохранении файла

Есть предложения?Большое спасибо!

enter image description here

Ответы [ 3 ]

1 голос
/ 08 ноября 2011

Это связано с тем, что Excel не поддерживает конвейеры, поэтому необходимо преобразовать его в запятую или точку с запятой, например:

using (StreamWriter outputWriter = new StreamWriter(File.Create(strExcelOutputFilename)))
{
    StreamReader inputReader = new StreamReader(TextFile.FileContent);
    string fileContent = inputReader.ReadToEnd();

    fileContent = fileContent.Replace('|', ',');
    outputWriter.Write(fileContent);
}
0 голосов
/ 08 ноября 2011

Для создания и работы с файлами Excel я лично предпочитаю библиотеку NPOI . Загрузите его с Codeplex, добавьте ссылку на библиотеки NPOI в свой проект. Сохраните «шаблонный» файл Excel, который вам нужен, в известном месте, с любыми заголовками / форматированием столбцов, которые вам нужны. Затем вы просто используете npoi, чтобы сделать копию файла шаблона и манипулировать им на уровне листа / строки / столбца и помещать любые нужные вам данные.

Пример кода выглядит примерно так. Предполагая, что вы разделили свой ввод в список строк

const string ExcelTemplateFile = "~/Resources/ExcelInputTemplate.xls";
const string ExcelWorksheetName = "Output Worksheet";
const int RequiredColumn = 1;

private HSSFWorkbook CreateExcelWorkbook(IEnumerable<String> inputData)
{
        FileStream fs = new FileStream(Server.MapPath(ExcelTemplateFile), FileMode.Open, FileAccess.Read);

        // Getting the complete workbook...
        HSSFWorkbook templateWorkbook = new HSSFWorkbook(fs, true);

        // Getting the worksheet by its name...
        HSSFSheet sheet = templateWorkbook.GetSheet(ExcelWorksheetName);

        int startRowIterator = 1;

        foreach (string currentData in inputData)
        {
            sheet.CreateRow(startRowIterator).CreateCell(RequiredColumn).SetCellValue(currentData);
        }
}
0 голосов
/ 08 ноября 2011

Я погуглил и надеюсь, что это поможет вам: http://csharp.net -informations.com / excel / csharp-create-excel.htm

Или уже ответил: Создать файл Excel (.XLS и .XLSX) из C #

По первой ссылке строка xlWorkSheet.Cell [x, y] для помещения элемента в выделенную ячейку.

К вашему сведению, формат xlsx (новинка из Office 2007) предоставит вам большие возможности манипулирования с кодом.

...