Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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# 从右到左打开XML Sheetview_C#_Excel_Openxml - Fatal编程技术网

C# 从右到左打开XML Sheetview

C# 从右到左打开XML Sheetview,c#,excel,openxml,C#,Excel,Openxml,我需要在ExporToExcel类中添加SheetView设置。但导出后,即使创建了工作表并设置了SheetView设置,也会显示Excel单元格内容为空。我检查了这个网站和其他网站上的所有帖子,但没有成功。每次我收到一个文件损坏的消息或电子表格是空的 private static void WriteExcelFile(DataSet ds, SpreadsheetDocument spreadsheet) { spreadsheet.AddWorkbookPart(); sp

我需要在ExporToExcel类中添加SheetView设置。但导出后,即使创建了工作表并设置了SheetView设置,也会显示Excel单元格内容为空。我检查了这个网站和其他网站上的所有帖子,但没有成功。每次我收到一个文件损坏的消息或电子表格是空的

private static void WriteExcelFile(DataSet ds, SpreadsheetDocument spreadsheet)
{
    spreadsheet.AddWorkbookPart();
    spreadsheet.WorkbookPart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook();

    spreadsheet.WorkbookPart.Workbook.Append(new BookViews(new WorkbookView()));

    WorkbookStylesPart workbookStylesPart = spreadsheet.WorkbookPart.AddNewPart<WorkbookStylesPart>("rIdStyles");
    //Stylesheet stylesheet = new Stylesheet();
    workbookStylesPart.Stylesheet = CreateStylesheet();

    uint worksheetNumber = 1;
    Sheets sheets = spreadsheet.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());
    foreach (DataTable dt in ds.Tables)
    {
        string worksheetName = dt.TableName;
        WorksheetPart newWorksheetPart = spreadsheet.WorkbookPart.AddNewPart<WorksheetPart>();
        Sheet sheet = new Sheet() { Id = spreadsheet.WorkbookPart.GetIdOfPart(newWorksheetPart), SheetId = worksheetNumber, Name = worksheetName };
        newWorksheetPart.Worksheet = new Worksheet(new SheetViews(new SheetView() { WorkbookViewId=0,RightToLeft=true}),new SheetData());
        newWorksheetPart.Worksheet.Save();

        sheets.Append(sheet);

        WriteDataTableToExcelWorksheet(dt, newWorksheetPart);

        worksheetNumber++;
    }
    spreadsheet.WorkbookPart.Workbook.Save();
}

private static void WriteDataTableToExcelWorksheet(DataTable dt, WorksheetPart worksheetPart)
{
    OpenXmlWriter writer = OpenXmlWriter.Create(worksheetPart, Encoding.ASCII);
    writer.WriteStartElement(new Worksheet());
    writer.WriteStartElement(new SheetData());

    string cellValue = "";

    int numberOfColumns = dt.Columns.Count;
    bool[] IsNumericColumn = new bool[numberOfColumns];
    bool[] IsDateColumn = new bool[numberOfColumns];

    string[] excelColumnNames = new string[numberOfColumns];
    for (int n = 0; n < numberOfColumns; n++)
        excelColumnNames[n] = GetExcelColumnName(n);

    //
    //  Create the Header row in our Excel Worksheet
    //
    uint rowIndex = 1;

    writer.WriteStartElement(new Row { RowIndex = rowIndex });
    for (int colInx = 0; colInx < numberOfColumns; colInx++)
    {
        DataColumn col = dt.Columns[colInx];
        AppendTextCell(excelColumnNames[colInx] + "1", col.ColumnName, ref writer);
        IsNumericColumn[colInx] = (col.DataType.FullName == "System.Decimal") || (col.DataType.FullName == "System.Int32") || (col.DataType.FullName == "System.Double") || (col.DataType.FullName == "System.Single");
        IsDateColumn[colInx] = (col.DataType.FullName == "System.DateTime");
    }
    writer.WriteEndElement();   //  End of header "Row"

    double cellNumericValue = 0;
    foreach (DataRow dr in dt.Rows)
    {
        ++rowIndex;

        writer.WriteStartElement(new Row { RowIndex = rowIndex });
        for (int colInx = 0; colInx < numberOfColumns; colInx++)
        {
            cellValue = dr.ItemArray[colInx].ToString();
            cellValue = ReplaceHexadecimalSymbols(cellValue);
            if (IsNumericColumn[colInx])
            {
                cellNumericValue = 0;
                if (double.TryParse(cellValue, out cellNumericValue))
                {
                    cellValue = cellNumericValue.ToString();
                    AppendNumericCell(excelColumnNames[colInx] + rowIndex.ToString(), cellValue, ref writer);
                }
            }
            else if (IsDateColumn[colInx])
            {
                //  This is a date value.
                DateTime dtValue;
                string strValue = "";
                if (DateTime.TryParse(cellValue, out dtValue))
                    strValue = dtValue.ToShortDateString();
                AppendTextCell(excelColumnNames[colInx] + rowIndex.ToString(), strValue, ref writer);
            }
            else
            {
                AppendTextCell(excelColumnNames[colInx] + rowIndex.ToString(), cellValue, ref writer);
            }
        }
        writer.WriteEndElement(); //  End of Row
    }
    writer.WriteEndElement(); //  End of SheetData
    writer.WriteEndElement(); //  End of worksheet

    writer.Close();
}
private static void WriteExcelFile(数据集ds、电子表格文档电子表格)
{
电子表格。AddWorkbookPart();
spreadsheet.WorkbookPart.Workbook=newdocumentformat.OpenXml.spreadsheet.Workbook();
电子表格.WorkbookPart.Workbook.Append(newbookview(newworkbookview()));
WorkbookStylesPart WorkbookStylesPart=电子表格.WorkbookPart.AddNewPart(“rIdStyles”);
//样式表样式表=新样式表();
workbookStylesPart.Stylesheet=CreateStylesheet();
单元工作表编号=1;
Sheets Sheets=电子表格.WorkbookPart.Workbook.AppendChild(新工作表());
foreach(ds.表中的数据表dt)
{
字符串工作表名称=dt.TableName;
WorksheetPart newWorksheetPart=电子表格.WorkbookPart.AddNewPart();
Sheet Sheet=new Sheet(){Id=spreadsheet.WorkbookPart.GetIdOfPart(newWorksheetPart),SheetId=worksheetNumber,Name=worksheetName};
newWorksheetPart.Worksheet=new工作表(new SheetView(){workbookview=0,RightToLeft=true}),new SheetData());
newWorksheetPart.Worksheet.Save();
附页(页);
已写入状态到Excel工作表(dt,新工作表部分);
工作表编号++;
}
电子表格.WorkbookPart.Workbook.Save();
}
私有静态无效写入StatableToExcelWorksheet(数据表dt,工作表部分工作表部分)
{
OpenXmlWriter=OpenXmlWriter.Create(工作表部分,Encoding.ASCII);
writer.writeStart元素(新工作表());
writer.writeStarElement(新的SheetData());
字符串cellValue=“”;
int numberOfColumns=dt.Columns.Count;
bool[]IsNumericColumn=新bool[numberOfColumns];
bool[]IsDateColumn=新bool[numberOfColumns];
string[]excelColumnNames=新字符串[numberOfColumns];
对于(int n=0;n
使工作表从右到左读取的代码是正确的。但是,
WriteDataTableToExcelWorksheet
CreateStylesheet
的代码不完整,存在一些问题

我在上找到了
WriteDataableToExcelWorkbench
的原始代码。然后,我用OpenXMLProductivity工具将一个普通的Excel文件反向设计为C#代码,并重用一个方法来创建一个新的样式表

使用此代码生成的excel文件如下所示:

。有一个包装器WPF应用程序可以指导在您的机器上生成文件的位置

这是一本书