Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试使用NPOI创建一个新的.xlsx文件并写入它_C#_Excel_Npoi - Fatal编程技术网

C# 尝试使用NPOI创建一个新的.xlsx文件并写入它

C# 尝试使用NPOI创建一个新的.xlsx文件并写入它,c#,excel,npoi,C#,Excel,Npoi,编辑: 我正在尝试编写一个小型控制台应用程序,它将从excel电子表格中读取行,解析行,并将字段数据写入一个新的excel文件。我正在使用.NET和NPOI库。经过深入挖掘,我终于在apache站点上找到了POI的Java文档。这是我的更新代码和新错误 这实际上创建了一个可读文件,只是它只将文本写入第三列 public static void TransferXLToTable() { DataTable dt = new DataTable();

编辑:

我正在尝试编写一个小型控制台应用程序,它将从excel电子表格中读取行,解析行,并将字段数据写入一个新的excel文件。我正在使用.NET和NPOI库。经过深入挖掘,我终于在apache站点上找到了POI的Java文档。这是我的更新代码和新错误

这实际上创建了一个可读文件,只是它只将文本写入第三列

    public static void TransferXLToTable()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("City", typeof(string));
        dt.Columns.Add("State", typeof(string));
        dt.Columns.Add("Zip", typeof(string));

        using (FileStream stream = new FileStream(OpenFile(), FileMode.Open, FileAccess.Read))
        {
            IWorkbook wb = new XSSFWorkbook(stream);
            ISheet sheet = wb.GetSheet("Sheet1");
            string holder;
            int i = 0;
            do
            {
                DataRow dr = dt.NewRow();
                IRow row = sheet.GetRow(i);
                try
                {
                    holder = row.GetCell(0, MissingCellPolicy.CREATE_NULL_AS_BLANK).ToString();
                }
                catch (Exception)
                {
                    break;
                }

                string city = holder.Substring(0, holder.IndexOf(','));
                string state = holder.Substring(holder.IndexOf(',') + 2, 2);
                string zip = holder.Substring(holder.IndexOf(',') + 5, 5);
                dr[0] = city;
                dr[1] = state;
                dr[2] = zip;
                dt.Rows.Add(dr);
                i++;
            } while (!String.IsNullOrEmpty(holder));
        }

        using (FileStream stream = new FileStream(@"C:\Working\FieldedAddresses.xlsx", FileMode.Create, FileAccess.Write))
        {
            IWorkbook wb = new XSSFWorkbook();
            ISheet sheet = wb.CreateSheet("Sheet1");
            ICreationHelper cH = wb.GetCreationHelper();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    IRow row = sheet.CreateRow(i);
                    ICell cell = row.CreateCell(j);
                    cell.SetCellValue(cH.CreateRichTextString(dt.Rows[i].ItemArray[j].ToString()));
                }
            }
            wb.Write(stream);
        }
    }
publicstaticvoidtransferxltotable()
{
DataTable dt=新的DataTable();
添加(“城市”,类型(字符串));
添加(“状态”,类型(字符串));
添加(“Zip”,typeof(string));
使用(FileStream stream=newfilestream(OpenFile(),FileMode.Open,FileAccess.Read))
{
IWorkbook wb=新XSSF工作簿(流);
ISHET表=wb.GetSheet(“表1”);
绳夹;
int i=0;
做
{
DataRow dr=dt.NewRow();
IRow row=sheet.GetRow(i);
尝试
{
holder=row.GetCell(0,MissingCellPolicy.CREATE_NULL_作为_BLANK.ToString();
}
捕获(例外)
{
打破
}
字符串city=holder.Substring(0,holder.IndexOf(',');
字符串状态=holder.Substring(holder.IndexOf(',')+2,2);
string zip=holder.Substring(holder.IndexOf(',')+5,5);
dr[0]=城市;
dr[1]=状态;
dr[2]=zip;
dt.Rows.Add(dr);
i++;
}而(!String.IsNullOrEmpty(holder));
}
使用(FileStream stream=newfilestream(@“C:\Working\fieldedaddress.xlsx”,FileMode.Create,FileAccess.Write))
{
IWorkbook wb=新XSSFWorkbook();
ISHET sheet=wb.CreateSheet(“Sheet1”);
ICreationHelper cH=wb.GetCreationHelper();
对于(int i=0;i
我发现了问题所在。这实际上是一个非常简单的错误,当我需要在外部循环中创建行时,我在最内部的for循环中创建了一个新行。希望答案中的工作代码对任何需要NPOI起点的人都有用

这个网站是一个伟大的资源,任何人开始与POI或NPOI

这是工作代码

    public static void TransferXLToTable()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("City", typeof(string));
        dt.Columns.Add("State", typeof(string));
        dt.Columns.Add("Zip", typeof(string));

        using (FileStream stream = new FileStream(OpenFile(), FileMode.Open, FileAccess.Read))
        {
            IWorkbook wb = new XSSFWorkbook(stream);
            ISheet sheet = wb.GetSheet("Sheet1");
            string holder;
            int i = 0;
            do
            {
                DataRow dr = dt.NewRow();
                IRow row = sheet.GetRow(i);
                try
                {
                    holder = row.GetCell(0, MissingCellPolicy.CREATE_NULL_AS_BLANK).ToString();
                }
                catch (Exception)
                {
                    break;
                }

                string city = holder.Substring(0, holder.IndexOf(','));
                string state = holder.Substring(holder.IndexOf(',') + 2, 2);
                string zip = holder.Substring(holder.IndexOf(',') + 5, 5);
                dr[0] = city;
                dr[1] = state;
                dr[2] = zip;
                dt.Rows.Add(dr);
                i++;
            } while (!String.IsNullOrEmpty(holder));
        }

        using (FileStream stream = new FileStream(@"C:\Working\FieldedAddresses.xlsx", FileMode.Create, FileAccess.Write))
        {
            IWorkbook wb = new XSSFWorkbook();
            ISheet sheet = wb.CreateSheet("Sheet1");
            ICreationHelper cH = wb.GetCreationHelper();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                IRow row = sheet.CreateRow(i);
                for (int j = 0; j < 3; j++)
                {
                    ICell cell = row.CreateCell(j);
                    cell.SetCellValue(cH.CreateRichTextString(dt.Rows[i].ItemArray[j].ToString()));
                }
            }
            wb.Write(stream);
        }
    }
publicstaticvoidtransferxltotable()
{
DataTable dt=新的DataTable();
添加(“城市”,类型(字符串));
添加(“状态”,类型(字符串));
添加(“Zip”,typeof(string));
使用(FileStream stream=newfilestream(OpenFile(),FileMode.Open,FileAccess.Read))
{
IWorkbook wb=新XSSF工作簿(流);
ISHET表=wb.GetSheet(“表1”);
绳夹;
int i=0;
做
{
DataRow dr=dt.NewRow();
IRow row=sheet.GetRow(i);
尝试
{
holder=row.GetCell(0,MissingCellPolicy.CREATE_NULL_作为_BLANK.ToString();
}
捕获(例外)
{
打破
}
字符串city=holder.Substring(0,holder.IndexOf(',');
字符串状态=holder.Substring(holder.IndexOf(',')+2,2);
string zip=holder.Substring(holder.IndexOf(',')+5,5);
dr[0]=城市;
dr[1]=状态;
dr[2]=zip;
dt.Rows.Add(dr);
i++;
}而(!String.IsNullOrEmpty(holder));
}
使用(FileStream stream=newfilestream(@“C:\Working\fieldedaddress.xlsx”,FileMode.Create,FileAccess.Write))
{
IWorkbook wb=新XSSFWorkbook();
ISHET sheet=wb.CreateSheet(“Sheet1”);
ICreationHelper cH=wb.GetCreationHelper();
对于(int i=0;i
我尝试了这个示例,您在这里的保存方法使我的excel崩溃,出现“文件可能已损坏”异常。。。这也会发生在你身上吗?(请看我的帖子:)在最后冲洗小溪很有帮助